ArrayBufferLike的打字稿定义的深层含义

时间:2018-09-20 01:21:15

标签: typescript

ArrayBufferLike的打字稿定义是什么意思?

interface ArrayBufferTypes {
    ArrayBuffer: ArrayBuffer;
}
type ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes];

根据我的理解,keyof ArrayBufferTypesArrayBufferTypes属性的联合类型。所以,

type Properties = keyof ArrayBufferTypes; // 'ArrayBuffer'

因此,ArrayBufferLike显然等于ArrayBuffer

但是必须存在一些差异,否则ArrayBufferLike将被定义为type ArrayBufferLike = ArrayBuffer

任何人都可以帮助解释这个定义吗?

1 个答案:

答案 0 :(得分:2)

原因是允许使用declaration merging扩展ArrayBufferTypes

此单成员接口在lib.es5.d.ts

中定义
interface ArrayBufferTypes {
    ArrayBuffer: ArrayBuffer;
}

但是具有相同名称但具有另一个成员的接口是在 es2017.sharedmemory.d.ts

interface ArrayBufferTypes {
    SharedArrayBuffer: SharedArrayBuffer;
}

当程序中同时包含两个类型声明时,声明将被合并,并产生联合类型

type ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes];

现在将有两个成员:ArrayBufferSharedArrayBuffer