根据打字稿类型系统,不能分配给。
但是,由于具有Java脚本的背景知识,我尝试了下一批代码,结果对我来说还不清楚:
let booleanVariable: boolean = false;
let numberVariable: number = booleanVariable || 1;
// compiles just fine > numberVariable = 1
如果我要更改'|| 1'至'|| 0',则发生编译器错误:
let booleanVariable: boolean = false;
let numberVariable: number = 0 || booleanVariable;
// type false is not assignable to number
如果我要将'booleanVariable'更改为'true',则会出现编译器错误:
let booleanVariable: boolean = true;
let numberVariable: number = booleanVariable|| 1;
// type true is not assignable to type number
通过将true更改为false并将操作数的顺序替换为'||',还可以进行更多调整。操作员。如果有人可以根据上述示例解释这种行为,我将不胜感激。
答案 0 :(得分:2)
在下面的行中,booleanVariable
的类型不是boolean
,而是false
。
let booleanVariable: boolean = false;
似乎您无法通过在操场或IDE中悬停变量来查看真实类型。但是,如果您需要说服,可以这样做:
const booleanVariable: boolean = false ;
const tmp = booleanVariable; // Here the type of `tmp` is inferred as `false`
这里是如何将booleanVariable
声明为真实的boolean
:
let booleanVariable = false as boolean;
现在,下一条指令是错误:
let numberVariable: number = booleanVariable || 1; // Error: Type 'true | 1' is not assignable to type 'number'.
在JavaScript 0
为falsy中,表达式0 || booleanVariable
总是返回booleanVariable
。因此,TypeScript推断表达式的类型是booleanVariable
的类型:
let numberVariable: number = 0 || booleanVariable; // Error: Type 'boolean' is not assignable to type 'number'.