Typescript将接口键转换为嵌套的元组/字符串数组



不确定这是否可能…但是我正在尝试使用接口的键将接口转换为元组。

接口:

interface User {
_id: string;
first_name: string;
last_name: string;
address: {
firstLine: string;
secondLine: string;
state: string;
zip: string;
details: {
active: boolean;
primary: boolean;
}
}
}

新的类型应该允许我创建这样一个数组:

const args: UserKeysTuple = ["_id", ["address", ["zip", "details": ["active"]]];

顺序不重要

在某种程度上使用映射类型是可能的:

type KeyTuple<T> = {
[Key in keyof T]:
T[Key] extends object ?
T[Key] extends Date ?
Key :
NestedTuple<T, Key> :
Key
}[keyof T][]
type NestedTuple<T, K extends keyof T> = [K, KeyTuple<T[K]>];
type UserKeysTuple = KeyTuple<User>;

这有一些限制,其中包括:

  • 这是一个烂摊子;参见Date的特殊情况,因为它是一个对象,但通常被视为原语
  • 这个不检查重复,所以一个键可以被列出多次而没有错误
  • 游乐场

最新更新