TypeScript 中的类构造函数类型

Shuvayan Ghosh Dastidar 2023年1月30日
  1. TypeScript 中的类型化构造函数
  2. TypeScript 中类的构造函数的类型
TypeScript 中的类构造函数类型

TypeScript 具有强类型语言,因此 TypeScript 中使用的每个变量和对象都有一个类型,这有助于进一步调试和避免应用程序中的运行时错误。本教程将重点介绍如何在 TypeScript 中为构造函数设置类型。

TypeScript 中的类型化构造函数

通常,当我们将对象传递给具有类型的类的构造函数时。我们可以有多种类型,甚至使用联合运算符。

代码:

interface AcademyInfo {
    name : string;
    country: string;
}

class Academy {
    private id;
    private info;
    private numStudents;
    constructor( info : AcademyInfo, id : string | number,  numStudents? : number){
        this.id = id;
        this.info = info;
        this.numStudents = numStudents ?? 0;
    }

    public getAcademyName(){
        return this.info.name;
    }
}
var academy = new Academy( {name : "Augustine Academy", country: "India"}, "3232dqsx23e", 1000 );

有一个构造函数支持不同类型的参数,例如 AcademyInfostring | numbernumber。在创建类的实例时,所有这些变量都可以传递给类的构造函数。

TypeScript 中类的构造函数的类型

类的构造函数可以有自己的类型。

语法:

type ConstructorType<T> = new (...args : any[]) => T;

上面的语法使用了泛型类型,表示构造函数将返回一个对象,该对象可以是 T 类型的类实例。使用类型化构造函数,可以在 TypeScript 中实现工厂设计模式。

代码:

interface Animal {
    speak() : void;
}

interface AnimalConstructor {
    new ( speakTerm : string, name : string, legs: number ) : Animal;
}

const createAnimalFactory = (
    ctor : AnimalConstructor,
    name : string,
    legs : number,
    speakTerm : string
) => {
    return new ctor(speakTerm, name, legs);
};

class Dog implements Animal{
    private name;
    private legs;
    private speakTerm;
    constructor(speakTerm : string, name : string, legs : number){
        this.speakTerm = speakTerm;
        this.legs = legs;
        this.name = name;
    }
    speak(){
        console.log( "Dog " + this.speakTerm + " I have " + this.legs + " legs");
    }
}

class Cat implements Animal{
    private name;
    private legs;
    private speakTerm;
    constructor(speakTerm : string, name : string, legs : number){
        this.speakTerm = speakTerm;
        this.legs = legs;
        this.name = name;
    }
    speak(){
        console.log( "Cat " + this.speakTerm + " I have " + this.legs + " legs");
    }
}
const dog = createAnimalFactory(Dog, "dog", 2, "woof");
const cat = createAnimalFactory(Cat, "cat", 2, "meow");

dog.speak();
cat.speak();

输出:

"Dog woof I have 2 legs"
"Cat meow I have 2 legs"

在上面的示例中,我们有两个名为 DogCat 的类,它们都实现了相同的接口 Animal 并且具有不同的 speak 方法实现。

createAnimalFactory 方法中,可以只传递 DogCat 类及其参数来创建该特定类的实例。

这种设计模式对于根据某些用例制作不同的类实例非常有用。

Shuvayan Ghosh Dastidar avatar Shuvayan Ghosh Dastidar avatar

Shuvayan is a professional software developer with an avid interest in all kinds of technology and programming languages. He loves all kinds of problem solving and writing about his experiences.

LinkedIn Website

相关文章 - TypeScript Constructor