typescript类型和构造器签名new

// 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();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值