我想获取某个类的通用参数的类型,例如:
week year Max GNDVI
22 2002 0.651
23 2002 0.711
...
39 2019 0.88
40 2019 0.67
class ClassA<T> {
value!: T;
getParameterType() {
return <type of T>;
}
}
方法返回T的类类型,该怎么做?或有其他方法?
答案 0 :(得分:1)
您不能在Typescript中返回类型,因为类型不是值。 Typescript会编译为Javascript,因此那里不存在类型。当我编译代码时(当我将'type'和'of'连接到typeof
时遇到的错误是:
'T'仅指类型,但在此处被用作值。
完全正确,您只能返回值并使用这些值执行操作。您无法返回类型。这与编写以下函数相同:
function wrong() {
return string // You can return 'hello world'
}
您不能说return string
还要查看打字稿代码在编译时会发生什么:
let x: string = 'hello world'
成为Javascript let x = 'hello world'
类型不见了!
您正在寻找的是一种从T
中提取通用参数ClassA
的类型,打字稿具有关键字infer
,这使您可以获取任何类型的类型参数。
type getType<T> = T extends ClassA<infer U> ? U : never
并像这样使用它:
type Test = getType<ClassA<string>>
测试类型为字符串
要注意类型和值的差异,它们不是一回事,它们的处理方式完全不同。