ArrayBufferLike
的打字稿定义是什么意思?
interface ArrayBufferTypes {
ArrayBuffer: ArrayBuffer;
}
type ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes];
根据我的理解,keyof ArrayBufferTypes
是ArrayBufferTypes
属性的联合类型。所以,
type Properties = keyof ArrayBufferTypes; // 'ArrayBuffer'
因此,ArrayBufferLike
显然等于ArrayBuffer
。
但是必须存在一些差异,否则ArrayBufferLike
将被定义为type ArrayBufferLike = ArrayBuffer
。
任何人都可以帮助解释这个定义吗?
答案 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];
现在将有两个成员:ArrayBuffer
和SharedArrayBuffer
。