web-dev-qa-db-ja.com

ジェネリックパラメータのタイプを取得します

型の扱いを良くするために小さな関数を書きました。

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);
}

ジェネリックで同じことを試しますが、ジェネリックパラメーターから型を取得する方法がわかりません。それが可能だ?

13
Matěj Pokorný

typeofはJavaScript演算子です。実行時にJavaScriptが認識しているタイプを取得するために使用できます。ジェネリックスは、コードの正確さをチェックするのに役立つTypeScriptの概念ですが、コンパイルされた出力には存在しません。したがって、簡単な答えはノーです、それは不可能です。

しかし、あなたはこのようなことをすることができます:

class Holder<T> {
    value: T;
    constructor(value: T) {
        this.value = value;
    }
    typeof(): string {
        return typeof this.value;       
    }
}

試してみてください

これは、ホルダー自体ではなく、ホルダー内の値を操作しているために機能します。

16