Дженерики typescript, почему такой код выдаёт ошибку Type '{}' is not assignable to type?
Никак не могу понять почему такой код выдаёт ошибку - Type '{}' is not assignable to type 'Keys<T>'.
type Keys<T extends string|symbol>={
[key in T]: string;
};
const foo = <T extends string|symbol>()=>{
const a:Keys<T> = {}
return a
}
Причем если подставить вручную тип string или symbol, никаких ошибок получено не будет. Лишь предупреждение о том, что T для функции объявлен, но не используется.
Пример рабочих кодов:
type Keys<T extends string|symbol>={
[key in T]: string;
};
const foo = <T extends string|symbol>()=>{
const a:Keys<string> = {}
return a
}
type Keys<T extends string|symbol>={
[key in T]: string;
};
const foo = <T extends string|symbol>()=>{
const a:Keys<symbol> = {}
return a
}
Вы можете проверить код здесь
Ответы (1 шт):
type Keys<T extends string|symbol> - T это обобщенный тип, т.е. при использовании такого type нужно будет явно указать тип (заменить T на нужный тип данных).
Ты получаешь ошибку, т.к. используешь свой генерик c 'обобщенным' типом. И соответсвенно не получаешь ошибку, когда подставляешь Key<string>
Мне кажется, что по задумке, ты хотел сделать что то вроде
type Keys<T extends string | symbol> = Record<T, string>;
const a: Keys<symbol> = {
[Symbol('id')] = '12345'
}
Или даже
const a: Record<symbol, string> = ....