在 TypeScript 中作为类输入

Posted

技术标签:

【中文标题】在 TypeScript 中作为类输入【英文标题】:Typing as Class in TypeScript 【发布时间】:2018-09-09 02:09:09 【问题描述】:

我在 TypeScript 中有一个接口或抽象类,我有一大堆实现/扩展接口/类的类,我想从所有子类的构造函数中创建一个数组,但我想要类型为接口/超类的数组。这可能吗?

如果我有:

export interface Section 
    somePropName: string;

或:

export class AbstractSection 
    somePropName: string;

然后我有:

arrayOfClasses: any[] = [
    SectionSubclass1,
    SectionSubclass2,
    SectionSubclass3,
    SectionSubclass4,
    SectionSubclass5,
];

我可以在any[] 以外的任何地方键入arrayOfClasses 吗?我想尽可能具体。我知道在 ActionScript 中您至少可以输入 Vector.<Class>,在 Haxe 中您可以输入 Array<Class>,但在 TypeScript 中您甚至不能输入 Class,AFAIK。

【问题讨论】:

arrayOfClasses: AbstractSection[] = [...];arrayOfClasses: Section[] = [...]; 那些不是期待实例,而不是构造函数吗? 你想把类本身放在数组还是它的实例中?如果你想自己存储类,可以arrayOfClasses: Array<typeof AbstractSection> = [...]; 啊,是的!这听起来像我想要的! 【参考方案1】:

如果你想存储类:

arrayOfClasses: Array<typeof AbstractSection> = [...];

如果要存储类的实例或接口的实现:

arrayOfClasses: AbstractSection[] = [...];

【讨论】:

明天试试这个。谢谢! 哦,我应该提到这不适用于接口,只能用于类。如果你在一个接口上尝试它,你会得到:“'Section' 只指一种类型,但在这里被用作一个值。” 没错,因为类是真正的 javascript 对象,但接口是元定义,只存在于 TypeScript 中。

以上是关于在 TypeScript 中作为类输入的主要内容,如果未能解决你的问题,请参考以下文章

vscode下搭建Typescript编译环境

TypeScript语法基础

转载:TypeScript 简介与《TypeScript 中文入门教程》

Typescript Interfaces(接口)添加任意key值/内容

在 Angular 5 TypeScript 中触发 keyup 事件

图书TypeScript实战指南