为 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;
}
我正在阅读 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;
}