2
私はTypeScriptの初心者ですので、私と一緒に裸にしてください。TypeScriptのジェネリックタイプの検出
私はオブジェクトからキーとしてルックアップするための引数として文字列を受け入れる単純なメソッドを書いています。このメソッドにはジェネリック型があり、返されたオブジェクトを型キャストするために使用されます。しかし、これは期待どおりに機能していません。実際に値を型キャストすることは可能ですか?もしそうなら、私はこれをどうやって行いますか?
class Application
{
private values : {[s : string] : string} = {
"foo" : "bar",
"test" : "1234"
}
public getValue<T>(key : string) : T
{
if (this.values.hasOwnProperty(key)) {
switch (typeof T) { // Doesn't work
case "string":
return this.values[key].toString();
case "number":
return parseInt(this.values[key]);
default:
throw new Error("Type of T is not a valid return type!");
}
} else {
throw new Error("Key '" + key + "' does not exist!");
}
}
}
var app : Application = new Application();
app.getValue<number>("test"); // Should return 1234
app.getValue<string>("test"); // Should return '1234'
か? – uksz
@uksz変数 'key'は常にオブジェクトからの値にアクセスしているので、文字列になります。自分の値を正しい形式に型キャストしようとしています。 – Paradoxis
これは実際にジェネリックではありませんあなたのリストは一般的なものではありません。今、呼び出し元は結果の値を解釈する方法を知る必要があります。なぜそれを明示的なパラメータにしないのですか? 'getValue(key:string、type:string){switch(type){//タイプスイッチング}}'。 「T」は型でなければなりませんが、実際にはその型を使って値をキャストしているわけではありません。呼び出し元が要求した内容に応じて異なるアクションをとるだけです。したがって、明示的な文字列ベースの型はかなり同等であり、作業の追加の利点があります。 – dlev