用于描述类的TypeScript接口

时间:2015-12-18 08:29:24

标签: typescript typescript1.7

TypeScript中是否有接口来描述类声明?

function module(name: string, classDeclaration: IClass) {
     this.classHash[name] = classDeclaration; //example use of class declaration
}

3 个答案:

答案 0 :(得分:1)

在JavaScript中,只有函数。 TypeScript&中的class关键字EcmaScript 6(用于此问题的目的)用于创建构造函数并填充其原型的糖。因此,TypeScript中“类”的通用接口与任何构造函数的接口相同:

interface Class<T> {
  new (...args: any[]): T;
  prototype: T;
}

答案 1 :(得分:0)

不要为您的函数module命名,它是TypeScript中的关键字。 AFAIK没有这样的界面或类,但你可以创建自己的界面IClass,我强烈推荐。

一个例子是:

interface IClass {}

class MyClass implements IClass {}
class MySecondClass implements IClass {}

function myModule(name: string, classDeclaration: IClass) {
     this.classHash[name] = classDeclaration; //example use of class declaration
}

myModule("1", MyClass);
myModule("2", new MyClass());
myModule("3", MySecondClass);

答案 2 :(得分:0)

没有。我原本期望Function(或FunctionConstructor)成为这样的界面,但是,没有。

令人不安的是,正如预期的那样,在下面的代码中,typeof返回的类型为function ...但function(小写f)是在Typescript中既不是类型也不是接口。所以答案必须是否定的。

"use strict";

class Hello {

    private s: string

    constructor(s: string) {
        this.s= s
    }

    public sayHello() {
        console.log(`Hello ${this.s}`)
    }    
}


function instantiate<T>(clazz: any, name: string): T {
    console.log(`Type of clazz: ${typeof clazz}`)
    return new clazz(name) as any as T
}


instantiate<Hello>(Hello, 'John').sayHello()