gpt4 book ai didi

typescript - 嵌套拾取定义

转载 作者:行者123 更新时间:2023-12-04 10:48:05 25 4
gpt4 key购买 nike

如果我有一个带有嵌入式对象的接口(interface),例如:

interface IStudent {
name: string;
address: {
lineOne: string;
lineTwo: string;
}
}

const getAddressLineOne = (student: Pick<IStudent, 'address'>) => student.address.lineOne;

对于函数的定义,我真的只关心选择 lineOne address 的一部分,但据我了解, Pick只允许我深入一层,而不是进一步说明我的意思。

有没有办法用 typescript 做到这一点?

最佳答案

您可以创建自己的NestedPick类型:

type NestedPick<T, K extends string[]> = T extends object ? {
[P in Extract<keyof T, K[0]>]: NestedPick<T[P], Tail<K>>
} : T

// get tail of tuple
type Tail<T extends any[]> = ((...args: T) => any) extends (head: any, ...tail: infer I) => any
? I : never

尚未测试边缘情况,但这可能是一个很好的起点。然后 getAddressLineOne好像:
const getAddressLineOne = (student: NestedPick<IStudent, ['address', 'lineOne']>) =>
student.address.lineOne;

// Test
declare const student: IStudent
const res = getAddressLineOne(student) // string

或者,您可以缩小 getAddressLineOne功能参数:
const getAddressLineOne2 = (address: Pick<IStudent["address"], "lineOne">) => address.lineOne;

Code sample

关于typescript - 嵌套拾取定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59609924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com