如何让Typescript允许未定义可选链接而不发出警告消息?

5n0oy7gb  于 2023-04-13  发布在  TypeScript
关注(0)|答案(2)|浏览(140)

在下面的例子中,Typescript一直警告obj?.[type]隐式地具有any类型。我希望回调函数能够是undefined或函数,因为我之后会检查它。我想保持obj动态,而不是显式地提供它的类型。我如何告诉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:链接

oxiaedzo

oxiaedzo1#

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

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

应该会有用的。

x4shl7ld

x4shl7ld2#

您可以在文件开头添加以下注解以避免类型检查:
// @ts-nocheck
但是,您也会从缺少的属性中得到一个错误

相关问题