Версия машинописного текста: 3.3.1
type Foo<T extends string> = {
[key in T]: number | undefined;
};
function square(num: number) {
return num * num;
}
function doStuff<T extends string>(foo: Foo<T>, keys: T[]) {
return keys.map((key) => {
const number = foo[key];
return number && square(number);
// TS2345: Argument of type 'number | undefined' is not
// assignable to parameter of type 'number'.
// Type 'undefined' is not assignable to type 'number'.
});
}
Из сообщения об ошибке я вижу, что машинопись расшифровала число до number | undefined
. Поэтому я ожидаю, что Typescript будет правильно сужать тип до number
в контексте number && ...
, но это не так. Зачем? Есть ли способ просто исправить это?
Это работает, когда я удаляю дженерики и заменяю все T
с string
с (и [key: string]
вместо [key in T]
) в типе.