В Typescript я создал объединенный тип с общим свойством type:
export type Instruction =
| { type: 'local.set', name: string, value: Expression }
| { type: 'i32.const', value: number }
| { type: 'i32.add', left: Expression, right: Expression };
И я хочу создать объект со значением свойства type в качестве ключа и в качестве значения a функция. Вот так:
const visitor: Record<Instruction['type'], (instruction: Instruction) => void> = {
'local.set': (instruction) => {},
'i32.const': (instruction) => {},
'i32.add': (instruction) => {},
}
Но ввод параметра 'инструкция' для меня слишком обобщенный c. Я хочу знать, к каким свойствам я могу получить доступ к инструкции из функции. Итак, как я могу создать Record
подобный тип со всеми ключами свойства 'type' в типе Instruction
и их соответствующим типом Instruction
в качестве значения?
Другими словами; Typescript может вывести тип, если я сделаю это:
const instruction: Instruction = { type: 'local.set' }; // TS knows about the missing 'name' and 'value' properties
Но я хочу сделать что-то вроде:
const instruction: Instruction[where type = 'local.set'] = { type: 'local.set' };
Возможно ли это и как?