如何让Typescript允许可选的链接是未定义的没有警告消息?



在下面的例子中,Typescript一直警告obj?.[type]隐式地具有any类型。我希望回调能够是未定义的或一个函数,因为我之后检查它。我希望保持对象是动态的,而不是显式地提供它的类型。我如何告诉typescript允许这个可选的链接语句传递而不发出警告消息?


const obj = {
row: {
over: {
page: () => { },
},
},
col: {
over: {
page: () => { }
}
},
el: {
over: {
page: () => { },
row: () => { },
}
}
};
function myFn(type: "page" | "row" | "col" | "el") {
const callback = obj?.[type]?.over?.[type];
if (callback) {
console.log("has callback");
}
console.log("no callback");
}
Typescript Playground: link

根本原因与可选链接无关。obj在第一级不包含page,因此会引起此警告。您应该像这样定义obj的类型:

const obj: Record<string, { over: Record<string, () => void> }> = {
// ...
};

,它应该工作。

您可以在文件开头添加以下注释以避免类型检查:

// @ts-nocheck

但是你也会因为缺少属性而得到错误

相关内容

  • 没有找到相关文章

最新更新