Eri*_*ann 1 generics typescript
我做了一个简单的测试夹具:
export interface ITest1 {}
export interface ITest2 {}
export interface ITestGeneric<T> {}
export function test() {
let p: ITestGeneric<ITest1> = {}
let q: ITestGeneric<ITest2> = p;
}
Run Code Online (Sandbox Code Playgroud)
我希望最后一行失败,因为在C#中这种不兼容的类型分配不起作用.但是,打字稿无需投诉即可编译.
有人能告诉我为什么这样做有效以及我必须做些什么来使其失败?
这是因为typescript使用结构兼容性来确定两种类型是否兼容.在你的情况下,因为ITestGeneric没有成员,它基本上与任何东西兼容.如果您开始添加属性,将很快出现不兼容性:
export interface ITest1 { t1: string}
export interface ITest2 { t2: number}
export interface ITestGeneric<T> { value: T}
export function test() {
let p: ITestGeneric<ITest1> = {} // error
let q: ITestGeneric<ITest2> = p; // error
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关typescript中类型兼容性的更多信息
| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |