型の扱いを良くするために小さな関数を書きました。
function evaluate(variable: any, type: string): any {
switch (type)
{
case 'string': return String(variable);
case 'number': return isNumber(variable) ? Number(variable) : -1;
case 'boolean': {
if (typeof variable === 'boolean')
return variable;
if (typeof variable === 'string')
return (<string>variable).toLowerCase() === 'true';
if (typeof variable === 'number')
return variable !== 0;
return false;
}
default: return null;
}
}
function isNumber(n: any): boolean {
return !isNaN(parseFloat(n)) && isFinite(n);
}
ジェネリックで同じことを試しますが、ジェネリックパラメーターから型を取得する方法がわかりません。それが可能だ?
typeof
はJavaScript演算子です。実行時にJavaScriptが認識しているタイプを取得するために使用できます。ジェネリックスは、コードの正確さをチェックするのに役立つTypeScriptの概念ですが、コンパイルされた出力には存在しません。したがって、簡単な答えはノーです、それは不可能です。
しかし、あなたはこのようなことをすることができます:
class Holder<T> {
value: T;
constructor(value: T) {
this.value = value;
}
typeof(): string {
return typeof this.value;
}
}
これは、ホルダー自体ではなく、ホルダー内の値を操作しているために機能します。