前提・実現したいこと
掲題の通り、ジェネリクスに引き渡された<T>
の型を実行時に確認したく思います。
後述する「実現したいコード」および「試してみたこと」について、
ご助言いただけますと幸いです。
環境
tsconfig.json
のcompilerOptions
は以下のように設定しています。
typescript
1"target": "es2018", 2"module": "CommonJS", 3"lib": ["esnext"], 4"strict": true, 5"experimentalDecorators": true, 6"esModuleInterop": true, 7"skipLibCheck": true, 8"forceConsistentCasingInFileNames": true
該当のソースコード
以下のように、メソッド引数に <T>
を利用すれば、typeof
によって確認することができます。
typescript
1function fn<T>(myType: T) { 2 console.log(typeof myType); 3} 4fn<number>(12345); 5//->> number 6 7class hoge<T> { 8 log(myType: T) { 9 console.log(typeof myType); 10 } 11} 12const hogeObj = new hoge<string>() 13hogeObj.log("123"); 14//->> string
実現したいコード
しかし、以下のようにメソッド引数を利用しない場合<T>
の型を直接確認する方法がないものか、ご教示いただけませんでしょうか
- ファンクションに
<T>
を指定して引数がないパターン
typescript
1function fn<T>() { 2 console.log(T); 3} 4fn<number>(); 5// コンパイルエラー
このコードでは、number
を取得したいです。
- クラスに
<T>
を指定して引数がないパターン
typescript
1class hoge<T> { 2 log() { 3 console.log(T); 4 } 5} 6const hogeObj = new hoge<string>() 7hogeObj.log(); 8// コンパイルエラー
このコードでは、string
を取得したいです。
試してみたこと
クラスの<T>
ならば、コンストラクタでごまかすことを試してみましたが、期待していない結果となってしまいました。
typescript
1class hoge<T> { 2 constructor(private c: {new(): T; }){} 3 log() { 4 console.log(this.c); 5 console.log(typeof this.c); 6 } 7} 8const hogeObj = new hoge<String>( String ) 9hogeObj.log(); 10//->> [Function: String] 11//->> function
//期待しているのはStringだが、newを実装していない型には利用できない。
このコードに関して、もし可能でしたら、this.c [Function: String]
から、
String
を取得する方法をご教示いただけますと幸いです。
お手数をおかけいたしますが、よろしくお願い申し上げます。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/07 15:18