为 Class 编写 Typescript 接口

Writing Typescript interface for a Class

我正在阅读 Typescript 手册的 Class Types 部分,我对如何为 Class 编写接口定义感到困惑。从文档中,我了解到可以使用一个接口来描述 Class 的 "instance" 一侧。但是,您将如何编写描述 Class 的 "static" 端的接口?

这是一个例子:

interface IPerson {
    name: string;
    getName(): string;
}

class Person implements IPerson {
    public name: string;

    constructor(name: string) {
        this.name = name;
    }

    public getName() {
        return this.name;
    }
}

在这个例子中,你会如何修改IPerson使得构造函数也可以被描述?

您可以为静态需求创建单独的界面:

interface IPerson {
    name: string;
    getName(): string;
}

class Person implements IPerson {
    public name: string;

    constructor(name: string) {
        this.name = name;
    }

    public getName() {
        return this.name;
    }

    public static create(name: string) { // method added for demonstration purposes
        return new Person(name);
    }
}

静态接口:

interface IPersonStatic {
    new(name: string); // constructor
    create(name: string): IPerson; // static method
}

let p: IPersonStatic = Person;

另外,可以使用typeof判断类型:

let p2: typeof Person = Person; // same as 'let p2 = Person;'
let p3: typeof Person = AnotherPerson;

我将 IPersonConstructor 添加到您的示例中。其余的是相同的;只是为了清楚起见。

new (arg1: typeOfArg1, ...): TypeOfInstance; 描述了一个 class,因为它可以用 new 调用,并且 return 是 class.[=14= 的一个实例]

interface IPerson {
    name: string;
    getName(): string;
}

class Person implements IPerson {
    public name: string;

    constructor(name: string) {
        this.name = name;
    }

    public getName() {
        return this.name;
    }
}

interface IPersonConstructor {
    // When invoked with `new` and passed a string, returns an instance of `Person`
    new (name: string): Person;
    prototype: Person;
}

通用的怎么样

interface IConstructor<T> extends Function {
    new (...args: any[]): T;
}