获取打字稿泛型类型作为字符串值

时间:2019-07-01 13:14:20

标签: typescript

我正在尝试获取通用函数中给定类型的名称类型。

这是针对nodeJS应用的。

我想做这样的事情:

static Get<T>(): string {
        return typeof T;
    }

但是此示例导致一个错误:“'T'仅指类型,但在此处被用作值。”

如果我打电话给我,结果就是“字符串”:

let strType: string = Get<string>();

2 个答案:

答案 0 :(得分:2)

由于泛型在运行时不可用,因此无法在其上调用typeof。但是,您可以这样做

function Get<T>(type: T): string {
        return typeof type;
    }

let strType: string = Get<number>(1);
strType: string = Get<string>("1");

答案 1 :(得分:1)

您可以通过TS Handbook来修改此类型:


type TypeName<T> =
    T extends string ? "string" :
    T extends number ? "number" :
    T extends boolean ? "boolean" :
    T extends undefined ? "undefined" :
    "object";

class Foo {

    static Get<T>(value: T): TypeName<T> {
        return typeof value;
    }
}

Foo.Get(123) // "number"
Foo.Get("str") // "string"