条件/三进制结果是否未在打字稿中正确检查类型?

时间:2019-05-21 08:29:11

标签: typescript typescript3.0

type User = {
    name: string;
};
const flag: any = false;
let list1: User;
list1 = flag ? flag : 1;   // hope error

为什么list1可以为1,为什么不是错误:类型'1'不能分配给类型'用户'

1 个答案:

答案 0 :(得分:2)

您在any的注释中使用flagany根据定义可以分配给任何类型,也可以分配给任何类型。这意味着表达式flag ? flag : 1的结果将为any(因为三元表达式的结果之一为any,表达式的类型为any | 1,它将得到减少为any)。

通常避免使用any。如果在编译时真的不知道类型,请使用unknown。在这种情况下,删除注释会产生预期的错误:

type User = {
    name: string;
};
const flag = false; // no annotation 
let list1: User;
list1 = flag ? flag : 1; // err