打字稿版本: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]
)时,它将起作用。