#typescript #typescript-generics
#typescript #typescript-generics
Вопрос:
Учитывая следующие типы:
// All possible values
type Alphabet = 'a' | 'b' | 'c' | 'd' | 'e' // ... etc
// Value transformation
type ComputedAlphabet<A extends Alphabet> = {[k in A]: true}
let x: ComputedAlphabet<'a' | 'b'>; // it correctly expects: {a: true, b: true}
Я хотел бы иметь тип функции, который принимает массив алфавита и вычисляет их значения:
type TransformAlphabet=(chars: Alphabet[]) => ComputedAlphabet<how to get subset of Alphabet based on `chars`???>
В идеале я хотел бы написать подобный вызов и правильно определить тип:
let transform: TransformAlphabet
transform(['a']) // should infer {a: true} as a return type
Конечно, первое, что я попробовал, это использовать общие типы, но не знал, как сделать общий тип необязательным при создании правильных типов:
type TransformAlphabet<A extends Alphabet>=(chars: A[]) => ComputedAlphabet<A>
Это работает, если я вручную передаю A
общий тип при вызове, что в моем случае непрактично.
Ответ №1:
У вас почти получилось:
type TransformAlphabet=<A extends Alphabet>(chars: A[]) => ComputedAlphabet<A>
Комментарии:
1. Я добавил ссылку.