Тип сопоставления по методам - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь создать тип объекта, который определяет значения другого типа.

У меня изначально было это:

export interface Obj {
  [key: string]: any
}

Теперь я хотел бы изменить его, чтобы он содержал списокпредметы из другого типа.Я пробовал следующее, но получаю сообщение об ошибке:

Тип параметра подписи индекса не может быть типом объединения.Попробуйте вместо этого использовать сопоставленный тип объекта.

type ListOfMethods = {
  one(): void
  two(): void
}

export interface Obj {
  [key: keyof ListOfMethods]: any
}

Итак, с этой ошибкой я попытался сделать следующее:

[key in keyof ListOfMethods]: any

А теперь получите эту ошибку

Имя вычисляемого свойства должно иметь тип 'string', 'number', 'symbol' или 'any'.

1 Ответ

0 голосов
/ 15 мая 2018

Вы должны определить Obj как:

export type Obj = {
  [key in keyof ListOfMethods]: any
}

Если вы используете :, вы указываете тип клавиши, а тип клавиши может быть только number или string.

keyof создает подтип string, который допускает только те значения, которые являются свойствами объекта аргумента. В этом случае keyof ListOfMethods равно 'one' | 'two'.

...