如何在打字稿中获取类的通用参数类型

时间:2020-06-17 12:25:50

标签: typescript generics

我想获取某个类的通用参数的类型,例如:

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的类类型,该怎么做?或有其他方法?

1 个答案:

答案 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>>测试类型为字符串

注意:

要注意类型和值的差异,它们不是一回事,它们的处理方式完全不同。