gpt4 book ai didi

javascript - 为什么 typescript 不知道我检查了对象类型?

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

我想构建这样一个函数:


const recursionProxy = <T extends object>(subject: T) =>
new Proxy(subject, {
get(target, key: keyof T) {
const nestedSubject = target[key];

if (typeof nestedSubject === "object") {
return recursionProxy(nestedSubject);
}

return nestedSubject ?? target._ ?? "Message not set";
},
});

但是在 recursionProxy(nestedSubject); 行下有一个错误说

[i] Argument of type 'T[keyof T]' is not assignable to parameter of type 'object'.

为什么 typescript 不考虑 if staement,在 if 语句中 nestedSubject 是对象类型

最佳答案

如果您使用类型谓词,它似乎确实有效:

const isObject = (f: any): f is object => {
if(typeof f === "object") return true;
return false;
}
const recursionProxy = <T extends object>(subject: T) =>
new Proxy(subject, {
get(target, key: keyof T) {
const nestedSubject = target[key];

if (isObject(nestedSubject)) {
return recursionProxy(nestedSubject);
}

return nestedSubject ?? target._ ?? "Message not set";
},
});

Link

如果需要,也可以在谓词中添加空检查:

const isObject = (f: any): f is object => {
if(f === null) return false;
if(typeof f === "object") return true;
return false;
}

关于javascript - 为什么 typescript 不知道我检查了对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73435390/

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