Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何创建类数组?_Typescript_Class - Fatal编程技术网

Typescript 如何创建类数组?

Typescript 如何创建类数组?,typescript,class,Typescript,Class,我想在TypeScript中创建一个类数组。这在vanilla JavaScript中是可能的: class A { constructor() {console.log('constructor');} a() {} } const array = [A]; new (array[0])(); // Prints 'constructor' 我想使用接口使数组类型安全。这是我在TypeScript中实现此功能的尝试: interface I { a(); } c

我想在TypeScript中创建一个类数组。这在vanilla JavaScript中是可能的:

class A {
    constructor() {console.log('constructor');}
    a() {}
}

const array = [A];

new (array[0])(); // Prints 'constructor'
我想使用接口使数组类型安全。这是我在TypeScript中实现此功能的尝试:

interface I {
    a();
}

class A implements I {
    constructor() {console.log('constructor')}
    a() {}
}

const array: I[] = [A];

new (array[0])();
当我编译此文件时,会出现以下错误:

Error:(16, 21) TS2322: Type 'typeof A' is not assignable to type 'I'.
  Property 'a' is missing in type 'typeof A'.
由于此错误消息提到
typeof A不可分配给类型“I”
,因此数组似乎不能包含类,因为
typeof
用于实例化对象


我需要的是一种将所有类分组到单个变量中而不实例化它们的方法,并且能够通过索引访问类。如何在TypeScript中实现这一点?

接口定义实例上可用的属性和方法,因此这将起作用:

 const array: I[] = [new A()];
这不是您想要的,但它应该说明它不起作用的原因:类和实例是两个不同的东西

您想说的是“这是一个类型数组,new()将返回I的一个实例”

我认为应该是这样的:

class Test implements I {
    a() {}
}

interface I {
    a();
}

interface TI {
    new (): I;
}

const arr: TI[] = [Test];

const inst = new arr[0]();

接口定义实例上可用的属性和方法,因此这将起作用:

 const array: I[] = [new A()];
这不是您想要的,但它应该说明它不起作用的原因:类和实例是两个不同的东西

您想说的是“这是一个类型数组,new()将返回I的一个实例”

我认为应该是这样的:

class Test implements I {
    a() {}
}

interface I {
    a();
}

interface TI {
    new (): I;
}

const arr: TI[] = [Test];

const inst = new arr[0]();