获取typescript泛型类型作为字符串值

获取typescript泛型类型作为字符串值,typescript,Typescript,我正在尝试获取泛型函数中给定类型的名称类型 这是针对nodeJS应用程序的 我想这样做: static Get<T>(): string { return typeof T; } static Get():字符串{ 返回类型T; } 但这个示例的结果是一个错误:“'T'仅指一个类型,但在这里用作一个值。” 如果我调用以下命令,我将使用“字符串”作为结果: let strType: string = Get<string>(); let str

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

这是针对nodeJS应用程序的

我想这样做:

static Get<T>(): string {
        return typeof T;
    }
static Get():字符串{
返回类型T;
}
但这个示例的结果是一个错误:“'T'仅指一个类型,但在这里用作一个值。”

如果我调用以下命令,我将使用“字符串”作为结果:

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

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

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

let strType: string = Get<number>(1);
strType: string = Get<string>("1");
函数Get(类型:T):字符串{ 返回类型的类型; } 让strType:string=Get(1); strType:string=Get(“1”);
您可以通过以下方式调整此类型:


键入类型名=
T扩展字符串?“字符串”:
T扩展数字?“编号”:
T扩展布尔?“布尔”:
T扩展未定义?“未定义”:
“对象”;
福班{
静态Get(值:T):TypeName{
返回值类型;
}
}
Foo.Get(123)/“number”
Foo.Get(“str”)/“string”

该函数的用途是什么?您接受的答案只给出了一个
字符串
,而我的答案给出了确切的文本字符串类型,例如
数字
对象
等等。我接受的答案告诉您:“因为泛型在运行时不可用”,这就是我问题的答案。你的回答有助于绕过我的问题。谢谢:)或者只是简单地
Get(1)
Get(“1”)
(类型推断)@Ric当然,在这一点上,你也可以简单地调用
typeof 1
。是的,当然,不确定这实际上是什么用例,但这就是答案。你已经正确、简洁地解释了错误概念,但您可能应该在解决方案中用非泛型类型
string | number | boolean | null | undefined
替换
T
。否则,该函数可能会使OP中的误解永久化。

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"