其实简单的理解就是
let a = 3; 这个编译器自动标注number类型
let b = '322'; 这个很自然的被编译成字符串类型
还有部分类型兼容的问题,
其实比上面的 自动类型推断用的还少,我看了文档并不是很理解它为什么要这样赋值
interface Named {
name: string;
}
let x: Named;
// y's inferred type is { name: string; location: string; }
let y = { name: 'Alice', location: 'Seattle' };
x = y;
额外属性为什么不会报错?
TypeScript 允许一个对象有比目标类型更多的属性,因为这些额外的属性不会影响目标类型的功能。只要目标类型的属性都存在,并且类型匹配,就可以赋值。
虽然但是可以这么写,但是不建议这么写代码估计会挨骂,突然赋值一个未定义的属性,无法让人接受甚至感到莫名其妙。
let x = (a: number) => 0; // x 是一个函数,接收一个参数 a: number
let y = (b: number, s: string) => 0; // y 是一个函数,接收两个参数 b: number 和 s: string
y = x; // OK
x = y; // Error
还有这种俩个函数互相赋值,因为参数兼容问题报错,正常也不应该相互赋值。
文章采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接。