不是TypeScript用户,但是我正在为我的JavaScript库编写TypeScript声明文件,并且停留在以下代码上:
function ArrayMixin(Base) {
class ExtendedArray extends Base {}
return ExtendedArray;
}
这将返回扩展给定类的类。在这种情况下,我想将Base限制为Arrays和TypedArrays(所谓的索引集合)。我可以创建一个声明所有必要构造函数的联合类型,并将其用作函数签名中的类型:
type IndexedCollection = ArrayConstructor|Int8ArrayConstructor
declare function ArrayMixin(Base: IndexedCollection): ExtendedArray
但是如何指定我的ExtendedArray扩展IndexedCollection中的任何扩展?如何声明ExtendedArray?
答案 0 :(得分:1)
您可以使用generic constraints来指定您的返回类型扩展IndexedCollection
,如下所示:
declare function ArrayMixin<T extends IndexedCollection>(Base: IndexedCollection): T
答案 1 :(得分:1)
如SørenD.Ptæus所建议的那样,对泛型进行了更多研究,这使我得出以下结论。 为了声明此JavaScript结构:
function ArrayMixin(Base) {
class ExtendedArray extends Base {}
return ExtendedArray;
}
我们在声明文件中需要它:
export declare class ExtendedArray {}
interface Constructor<T> {
new (...args): T;
}
export declare function ArrayMixin<T extends IndexedCollection>(Base?: Constructor<T>):
Constructor<T & ExtendedArray>;