typescriptのクラスコンストラクタ型?



Class Constructor Type Typescript



解決:

typescriptインターフェースリファレンスからの解決策:

interface ClockConstructor {new(時間:数値、分:数値):ClockInterface; }インターフェイスClockInterface {tick(); } function createClock(ctor:ClockConstructor、hour:number、minute:number):ClockInterface {return new ctor(hour、minute); }クラスDigitalClockはClockInterfaceを実装します{コンストラクター(h:数値、m:数値){} tick(){console.log( 'ビープ音'); }}クラスAnalogClockはClockInterfaceを実装します{コンストラクター(h:数値、m:数値){} tick(){console.log( 'tick tock'); }} let digital = createClock(DigitalClock、12、17);アナログ= createClock(AnalogClock、7、32);

したがって、前の例は次のようになります。



インターフェースAnimalConstructor {new():動物; }クラスAnimal {コンストラクタ(){console.log( 'Animal'); }}クラスペンギンは動物を拡張します{コンストラクター(){スーパー(); console.log( 'ペンギン'); }}クラスLionはAnimalを拡張します{constructor(){super(); console.log( 'ライオン'); }} class Zoo {AnimalClass:AnimalConstructor // AnimalClassは 'Lion'または 'Penguin'コンストラクター(AnimalClass:AnimalConstructor){this.AnimalClass = AnimalClass let Hector = new AnimalClass(); }} 

そのように:

class Zoo {AnimalClass:typeof Animal;コンストラクター(AnimalClass:typeof Animal){this.AnimalClass = AnimalClass let Hector = new AnimalClass(); }}

あるいは単に:



class Zoo {constructor(public AnimalClass:typeof Animal){let Hector = new AnimalClass(); }}

typeof Classは、クラスコンストラクターの型です。静的クラスメンバーを適切に処理するため、カスタムコンストラクター型宣言よりも推奨されます。

TypeScriptドキュメントの関連部分は次のとおりです。検索するtypeof。 TypeScript型注釈の一部として、これは「動物と呼ばれるシンボルの型を教えてください」という意味です。これは、この場合のクラスコンストラクター関数の型です。


これが可能かどうかはわかりません TypeScript 質問が最初に尋ねられたとき、しかし私の好ましい解決策は ジェネリック



クラスZoo {コンストラクター(パブリック読み取り専用AnimalClass:new()=> T){}}

このように変数ペンギンとライオンはコンクリートタイプを推測しますペンギンまたはTypeScriptインテリセンスでもLion。

const penguinZoo = new Zoo(Penguin); const penguin = new penguinZoo.AnimalClass(); // `penguin`は` Penguin`タイプです。 const lionZoo = new Zoo(Lion); const lion = new lionZoo.AnimalClass(); // `lion`は` Lion`タイプです。