我想定义一个数组类型,它必须包含给定类型的嵌套属性名称链。
假设我有一个类型:
type Foo = {
outer: {
inner: any;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想定义一个包含 2 个元素的 Array 类型:
type PropertyList<T, K1 extends keyof T, K2 extends keyof T[K1]> = [K1, K2];
Run Code Online (Sandbox Code Playgroud)
我想像这样使用它:
let myList:PropertyList<Foo> = ["outer", "inner"]
Run Code Online (Sandbox Code Playgroud)
所以我希望编译器检查包含的 2 个属性名称是否是 Foo 的嵌套属性名称。
但是我不能只用 1 个泛型参数定义 PropertyList,然后我收到这个错误:
TS2314: Generic type 'PropertyList' requires 3 type argument(s)
Run Code Online (Sandbox Code Playgroud)
知道如何推断嵌套的 keyof 类型而不必指定它们吗?
我编写了一个函数,将给定枚举的所有值作为数组返回.实现工作,但我有一个返回值类型的问题.
enum Foo {
FOO_1 = "FOO_1",
FOO_2 = "FOO_2",
}
function getEnumValues<T>(e:T): T[] {
let keys: string[] = Object.keys(e);
keys = keys.filter(key => e[key] !== undefined);
return keys.map(key => e[key]);
}
const fooValues:Foo[] = getEnumValues(Foo);
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
错误:(46,7)TS2322:类型'(typeof Foo)[]'不能分配给'Foo []'.类型'typeof Foo'不能分配给'Foo'类型.
如何更改签名getEnumValues()
才能在Foo[]
此处返回类型?