Typescript:如何在.d.ts文件中声明自定义映射和数组

Typescript:如何在.d.ts文件中声明自定义映射和数组,typescript,generics,declaration,Typescript,Generics,Declaration,我想在.d.ts文件中创建映射和数组类的自定义类型声明,如下所示: //iter.d.ts 接口自定义映射{ get(key:U):V |未定义; 设置(键:U,值:V):无效; } 接口自定义数组{ 长度():数字; } 但我希望能够仅使用.d.ts文件中的声明执行以下操作: //test.ts cArray=新的CustomArray(1,3,2,3); 卡雷[0]=2; console.log(cArray[2])//2 (卡雷一期工程){ 控制台日志(i); } cMap=新的自定义地

我想在.d.ts文件中创建映射和数组类的自定义类型声明,如下所示:

//iter.d.ts
接口自定义映射{
get(key:U):V |未定义;
设置(键:U,值:V):无效;
}
接口自定义数组{
长度():数字;
}
但我希望能够仅使用.d.ts文件中的声明执行以下操作:

//test.ts
cArray=新的CustomArray(1,3,2,3);
卡雷[0]=2;
console.log(cArray[2])//2
(卡雷一期工程){
控制台日志(i);
}
cMap=新的自定义地图(['1','a'],['3','b'],['2','ç'],['4','d']);
用于(cMap的常数[k,v]{
console.log(k+':'+v);
}
我应该向CustomMap和CustomArray接口添加什么?
(目标是ES2015或更高版本)。

为了使示例代码正常工作,您需要与该示例代码中的每一行对应的声明。让我们来看看它们:



要使这些功能正常工作,您需要
CustomArray
接口具有一个数值类型
T
,如下所示:

declare const CustomArray: new <T>(...a: T[]) => CustomArray<T>;
    [n: number]: T;

要使其工作,您需要设置
CustomArray
接口,这意味着它有一个名为的方法,该方法返回一个:

然后应该编译以下内容(注意
cArray
cMap
变量需要有一个正确的声明,如
const
):

//test.ts
const cArray=新的自定义数组(1,3,2,3);
卡雷[0]=2;
console.log(cArray[2])//2
(卡雷一期工程){
控制台日志(i);
}
const cMap=new CustomMap(['1','a'],['3','b'],['2','ç'],['4','d']);
用于(cMap的常数[k,v]{
console.log(k+':'+v);
}

好吧,希望这会有帮助;祝你好运


所谓“仅声明”,您的意思是您不想实现它们,而只想让TypeScript编译器对它们的类型有足够的了解,以便成功编译?喜欢吗?没错。这就是我想要的。
cArray[0] = 2;
console.log(cArray[2]) // 2
    [n: number]: T;
for (const i of cArray) {
    console.log(i);
}
    [Symbol.iterator](): IterableIterator<T>;
//iter.d.ts
interface CustomMap<U, V> {
    get(key: U): V | undefined;
    set(key: U, val: V): void;
    [Symbol.iterator](): IterableIterator<[U, V]>
}
declare const CustomMap: new <U, V>(...a: [U, V][]) => CustomMap<U, V>;

interface CustomArray<T> {
    length(): number;
    [n: number]: T;
    [Symbol.iterator](): IterableIterator<T>;
}
declare const CustomArray: new <T>(...a: T[]) => CustomArray<T>;
//test.ts

const cArray = new CustomArray<number>(1, 3, 2, 3);
cArray[0] = 2;
console.log(cArray[2]) // 2
for (const i of cArray) {
    console.log(i);
}

const cMap = new CustomMap<string, string>(['1', 'a'], ['3', 'b'], ['2', 'ç'], ['4', 'd']);
for (const [k, v] of cMap) {
    console.log(k + ':' + v);
}