// 1、限定普通变量类型
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
run(): void {
console.log(`Person run :: name=${this.name} age=${this.age}`);
}
}
class Student extends Person {
run(): void {
console.log(`Student run :: name=${this.name} age=${this.age}`);
super.run();
}
}
class Teacher extends Student {
run(): void {
console.log(`Teacher run :: name=${this.name} age=${this.age}`);
super.run();
}
}
// new Teacher("t1", 11).run();
// 2、构造器签名简述
// 字面量方式构造器签名
const Myclass1: new (name: string, age: number) => Person = Student;
// new Myclass1("m1", 11).run();
// 接口字面量方式构造器签名
interface M2 {
new (name: string, age: number): Person;
}
const Myclass2: M2 = Student;
// const Myclass2: { new (name:string, age:number) : Person } = Student;
// new Myclass2('m2', 22).run();
// 泛型
interface M3<T> {
new (name: string, age: number): T;
}
const Myclass3: M3<Person> = Teacher;
// new Myclass3("m3", 33).run();
// 3、使用构造器签名
// 泛型工厂模式
function createClass(ClassName: M3<Person>, name: string, age: number): Person {
return new ClassName(name, age);
}
createClass(Teacher, 't11', 66).run();
typescript类型和构造器签名new
于 2022-03-17 17:55:38 首次发布