ジェネリクス型をリテラル型として取り出したい
Q&A
Closed
解決したいこと
typescriptにて、クラスによって異なる引数を取るといったコードを記述したいです。
言語化するのが少し難しいので、コードを先に提示します。
// 各クラスの実装省略
abstract class BaseClass {}
class Custom1class extends BaseClass {}
class Custom2class extends BaseClass {}
class Custom3class extends BaseClass {}
abstract class CustomUseBaseClass<T extends BaseClass> {
readonly classType: unknown; // ここの型を指定したい
abstract main(instance: T): void;
}
上記のように、BaseClass
を拡張したいくつかのカスタムクラスがあります。
それらのクラスを使用するクラスとして、ベースでCustomUseBaseClass
があります。
ここから新たなクラスCustomUse1Class
を作成するとして、このクラスのmain
関数は引数としてcustom1class
のインスタンスを使用したいです。
実装としてはおおよそ以下の形になります。
class CustomUse1Class extends CustomUseBaseClass<custom1class> {
readonly classType: 'custom1class' = 'custom1class'; // 表題の箇所の具体例
main(instance: custom1class) {
// 略
}
}
このように、main
の引数はcustom1class
を取ります。
ここで、CustomUse1Class
が、引数としてcustom1class
を取る、ということを見分ける1ために、classType
として文字列のcustom1class
を入れようと思いました。
ここからが本題です。
上記のコードのように、T
にそのまま与えられた文字列をリテラル型として扱う手段はありますか?
-
requireで動的読み込みを考えているため、型推論が一度anyを通ります。そのため、見分けるためのものが必要になりました。 ↩