typescript null/undefined值被推断为什么类型?

新手上路,请多包涵

环境:

VS Code Version: 1.47.3
tsc Version: 4.0.0-dev.20200727
tsconfig.js: "strict": true,

code:

let x = null; // x 是 any type
let y = x; // x 是 null type(x 在上面是 any type呀?), y 是 null type

x = 1; // x 是 any type
y = 1; // error, y 是 null type

x 到底是什么类型?

阅读 4.2k
3 个回答

其实 Typescript 中的 any 分为 显式声明隐式推导。开启了 --noImplicitAny 后,当没法推测出变量类型时,Typescript 不再隐式地将变量直接标记为 any ,而是使用了一种改进型的 any 来标记。即:

如果一个变量没有指明类型,且声明时没有初始化或是使用 null 或 undefined 初始化,则这个变量会被标记为 改进型 any 类型,会根据最终的赋值来动态推导其真正的类型

参见官方说明: https://www.typescriptlang.or...

DEMO

TypeScript 规则 nullundefined 是所有类型的子类型,这就是为什么 let x = null;xany 类型。

TypeScript 的类型推论有一个很重要的点就是上下文关联,这是实时性的,虽然 xany 类型,但是基于上下文的确认,x 就是一个 null 类型,这就是为什么 y 会是 null 类型的原因。

建议当初始值是 nullundefined 务必指定具体的类型,例如:let x: number | number = null;

typeof null === 'object'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进