[英]Writing Typescript interface for a Class
我正在阅读《打字稿手册》的“ 类类型”部分,并对如何编写类的接口定义感到困惑。 从文档中,我知道可以使用接口来描述Class的“实例”端。 但是,您将如何编写描述类的“静态”方面的接口?
这是一个例子:
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;
描述一个类,因为它可以用new
调用,并返回该类的实例。
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.