打字稿类型保护删除空或未定义的联合类型

时间:2021-01-12 15:36:29

标签: typescript typescript-typings typescript-generics

我有一个对象字面量,想为该特定对象的类型编写类型保护。

我的对象如下所示:

const typeDictator = {
    value: undefined as number | undefined | string,
}

所以如果我没有弄错我的对象的类型应该导致

{value: number | undefined | string}

但是每当我像这样为它编写类型保护时:

function generic<T>(obj: unknown, type: T): obj is T {
    return true;
}

并使用

检查类型
const typedObject = null;

if(generic(typedObject, typeDictator)) {
    typedObject
}

然后将 typedObject 的类型简化为 {value: number | string}

但为什么它会删除 undefinednull 联合类型并更改任何相关内容?

1 个答案:

答案 0 :(得分:1)

尝试将 "strict": true, 添加到您的 tsconfig。如果您的 tsconfig 过于宽松(或完全缺失),则将从类型中删除 null 和 undefined。