Rol*_*oly 7 primitive coercion subtyping typescript
为什么这是合法的TypeScript?
var x: number = 5
var y: Object = x
Run Code Online (Sandbox Code Playgroud)
肯定有一个数字不是Object.有人可能怀疑x被隐式强制(自动装箱)到一个对象,但没有:
if (!(y instanceof Object)) {
console.log(typeof y)
}
Run Code Online (Sandbox Code Playgroud)
版画
number
Run Code Online (Sandbox Code Playgroud)
作为记录:
$ tsc --version
Version 1.8.10
Run Code Online (Sandbox Code Playgroud)
TypeScript中的类型兼容性基于结构子类型,而不是名义类型.也就是说,考虑以下两个接口定义:
interface IFoo { X: number }
interface IBar { X: number; Y: number }
Run Code Online (Sandbox Code Playgroud)
是否IBar延长IFoo?没有.
但是IFoo兼容IBar吗?是.
成员IFoo是一个子集IBar的成员,因此你可以将任意IBar给IFoo.但它反过来不起作用:
var x: IFoo;
var y: IBar;
x = y // all good
y = x // type error, x has no Y member
Run Code Online (Sandbox Code Playgroud)
这种方式在Typescript中,Object如果您将其视为空接口,则所有类型都是兼容的.通过这种方式,您可以将任何有效的typescript值传递给函数,以接受Object和编写Javascript库的方式.
我建议阅读文档中的类型兼容性和关于子类型与分配的最后一段.
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |