1. ホーム
  2. class

[解決済み] typescriptのクラスコンストラクタ型?

2022-11-02 17:23:32

質問

どのようにすれば class 型を宣言し、オブジェクトが一般クラスのコンストラクタであることを確認するにはどうしたらよいでしょうか。

次の例では、どの型を AnimalClass に与えるべきかを知りたいのです。 Penguin または Lion :

class Animal {
    constructor() {
        console.log("Animal");
    }
}

class Penguin extends Animal {
    constructor() {
        super();
        console.log("Penguin");
    }
}

class Lion extends Animal {
    constructor() {
        super();
        console.log("Lion");
    }
}

class Zoo {
    AnimalClass: class // AnimalClass could be 'Lion' or 'Penguin'

    constructor(AnimalClass: class) {
        this.AnimalClass = AnimalClass
        let Hector = new AnimalClass();
    }
}

もちろん class 型は機能しませんし、いずれにせよ一般的すぎるでしょう。

どのように解決するのですか?

で可能だったのかどうか、よくわかりません。 タイプスクリプト で可能かどうかはわかりませんが、私の好みの解決策は ジェネリックス :

class Zoo<T extends Animal> {
    constructor(public readonly AnimalClass: new () => T) {
    }
}

このように変数 penguinlion 具体的なタイプを推論する Penguin または Lion のように、TypeScriptのインテリセンスでも

const penguinZoo = new Zoo(Penguin);
const penguin = new penguinZoo.AnimalClass(); // `penguin` is of `Penguin` type.

const lionZoo = new Zoo(Lion);
const lion = new lionZoo.AnimalClass(); // `lion` is `Lion` type.