为什么Typescript无法从通用类型中解开此可选内容?

时间:2019-03-07 11:37:43

标签: typescript typescript-generics

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

0 个答案:

没有答案