gpt4 book ai didi

javascript - 'null coalescing' TS 友好函数

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:30 26 4
gpt4 key购买 nike

我正在尝试在 TS 中使用“空合并函数”。基本上 get(obj, 'key1', 'key2', 'key3')

这是我所拥有的:

const X = {
a: 42,
b: 'bar',
c: {
d: 'foo'
}
}

function get<T, K extends keyof T>(item: T, key: K, ...more: string[]): T[K] | null {
if (key in item) {
const out = item[key];
if (more.length) {
return get(out, more[0], ...more.slice(1));
} else {
return out;
}
} else {
return null;
}
}

const foo = get(X, 'c', 'd');

这适用于顶层,例如get(X, 'c'),但由于某种我无法弄清楚的原因在递归上崩溃了。无论我尝试什么,我都会遇到各种 TS 错误,这些错误或多或少表明我无法将字符串转换为 keyof T[K],即使这正是我第一次调用它时所做的!

帮助!

[edit] 所以这可行,但是 AF 很丑!有人帮帮我

function get<T, K extends keyof T>(item: T, key: K): T[K] | null;
function get<T, K extends keyof T, L extends keyof T[K]>(item: T, key1: K, key2: L): T[K][L] | null;
function get<T, K extends keyof T, L extends keyof T[K], M extends keyof T[K][L]>(item: T, key1: K, key2: L, key3: M): T[K][L][M] | null;
function get(obj, key, ...moreKeys) {
...

最佳答案

目前在 TypeScript 中无法像您尝试实现的那样表达深层类型路径。有一个 GitHub 问题 discussing possible workarounds类似于你自己的。还有一个建议suggesting the "pathof" keyword来解决这个确切的问题。

与此同时,您似乎需要像在编辑中所做的那样,将类型详尽地定义到 X 级别。

关于javascript - 'null coalescing' TS 友好函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117892/

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