typescript中的内部类类型



是否有办法在typescript中创建内部类类型?像这样:

class Example<Data extends Record<string, any>> {
type Key = keyof Data; // not allowed
getKeys(): Key[] { ... }
}

在函数块中是可能的,例如:

function getKeys<Data extends Record<string, any>>(data: Data) {
type Key = keyof Data; // allowed
const keys: Key[] = Object.keys(data);
return keys
}
最接近的解决方案是定义一个泛型:
class Example<Data extends Record<string, any>, Key = keyof Data> {
getKeys(): Key[] { return [] }
}
const example = new Example<{aKey: 'value'}>();
const example2 = new Example<{aKey: 'value'}, "aKey">();

但:

  • 类型key可以被覆盖(因为我们只给T一个默认值)
  • 因为它可以被覆盖,在少数情况下,如果我假设返回类型为T而不显式转换它,TS会抱怨。

有没有干净的解决方案或变通方法?

这目前是不可能的:参见#7061:允许在类中声明类型别名

最新更新