Typescript 为什么是;弦乐;“数字”;未评估为;决不;打字稿?
我在试验Typescript中常见基本类型之间的一些交叉点 默认情况下,null和undefined是所有其他类型的子类型。这意味着您可以将null和undefined赋值给类似number的对象 但是,当使用--stricnullchecks标志时,null和undefined仅可分配给unknown、any及其各自的类型(一个例外是undefined也可分配给void)。这有助于避免许多常见错误。如果要传入字符串或null或undefined,可以使用union类型字符串| null | undefined 以下是我运行的测试: 鉴于Typescript 为什么是;弦乐;“数字”;未评估为;决不;打字稿?,typescript,Typescript,我在试验Typescript中常见基本类型之间的一些交叉点 默认情况下,null和undefined是所有其他类型的子类型。这意味着您可以将null和undefined赋值给类似number的对象 但是,当使用--stricnullchecks标志时,null和undefined仅可分配给unknown、any及其各自的类型(一个例外是undefined也可分配给void)。这有助于避免许多常见错误。如果要传入字符串或null或undefined,可以使用union类型字符串| null |
null
和undefined
是所有其他类型的子类型(当禁用--strictNullChecks
时),我想所有结果都有意义,除了一个:
type STRING_NUMBER = string & number; // string & number
字符串和数字
不应该永远都是
我还运行了启用了
--strictNullChecks
的测试
鉴于使用strictNullChecks
未定义的和null
只能分配给未知的和任何的,那么下面的所有检查不应该被评估为从不,而不是交叉点吗
type STRING_UNDEFINED = string & undefined; // string & undefined
type STRING_NULL = string & null; // string & null
type NUMBER_UNDEFINED = number & undefined; // number & undefined
type NUMBER_NULL = number & null; // number & null
我想这是因为TS算法。即使将某个交叉点而不是从不
,作为工具提示,该行为与从不
没有区别。例如,如果启用了strictNullChecks
,则不能为类型为string&undefined
或undefined
的变量赋值。@hrefа。但是看看这个。他似乎以一种非从不的方式使用字符串和数字。你认为呢?如果你尝试一下这个答案中的代码,并将替换为string&number
而将替换为as never
,你将看不到任何区别。这是因为never
type是任何其他类型的子类型。这是一种证明,string&number
总是解析为never
,即使TS在工具提示中显示了不同的内容。当然,也许我错了:)另外,如果你在操场上切换到最新版本的TS,你会看到预期的类型:)你是对的。如果你愿意,可以写一个答案。谢谢。我想这是因为TS算法。即使将某个交叉点而不是从不
,作为工具提示,该行为与从不
没有区别。例如,如果启用了strictNullChecks
,则不能为类型为string&undefined
或undefined
的变量赋值。@hrefа。但是看看这个。他似乎以一种非从不的方式使用字符串和数字。你认为呢?如果你尝试一下这个答案中的代码,并将替换为string&number
而将替换为as never
,你将看不到任何区别。这是因为never
type是任何其他类型的子类型。这是一种证明,string&number
总是解析为never
,即使TS在工具提示中显示了不同的内容。当然,也许我错了:)另外,如果你在操场上切换到最新版本的TS,你会看到预期的类型:)你是对的。如果你愿意,可以写一个答案。谢谢
// --strictNullChecks ENABLED
type BOOLEAN_STRING = boolean & string; // NEVER
type BOOLEAN_NUMBER = boolean & number; // NEVER
type BOOLEAN_UNDEFINED = boolean & undefined; // NEVER
type BOOLEAN_NULL = boolean & null; // NEVER
type STRING_NUMBER = string & number; // string & number
type STRING_UNDEFINED = string & undefined; // string & undefined
type STRING_NULL = string & null; // string & null
type NUMBER_UNDEFINED = number & undefined; // number & undefined
type NUMBER_NULL = number & null; // number & null
type STRING_UNDEFINED = string & undefined; // string & undefined
type STRING_NULL = string & null; // string & null
type NUMBER_UNDEFINED = number & undefined; // number & undefined
type NUMBER_NULL = number & null; // number & null