是否有办法在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:允许在类中声明类型别名