javascript - TypeScript - 区分 null 类型和 null 对象值

标签 javascript typescript

我正在将一些 JS 代码迁移到 TS,并且面临着区分 TypeScript 中的 null 类型与仅在对象中给出字段的 null 值的问题。

这是一个虚拟示例:

export const performProcedure = () => {
    let newPerson = {
        name: null,
        birthdate: null
    }

    if (<someCheck>) {
        newPerson.name = "Default name";
    }

    ...
}

就 JS 而言,上面的代码是有效的。但是,当我合并 TS 时,我收到一条错误消息,指出类型“默认名称”不可分配给类型“null”。它似乎这样做是因为现在 TS 将 name : null 解释为 name 的类型为 null 这不是我想要的。我只是想将其初始化为 null。

如何解决我的问题?

最佳答案

Typescript 解析出 newPerson.name 的类型为“null”,因为您将 null 放在那里。解决这个问题的最佳方法是尽可能具体。如果您想允许空值和字符串,请创建一个这样的接口(interface):

interace Person {
    name: string | null;
    birthdate: Date | null;
}

let newPerson: Person = { ... }

这是最明确的。可能更好的方法是使用 undefined 而不是 null。然后你可以只使用可选参数:

interace Person {
    name?: string;
    birthdate?: Date;
}

值得注意的是,如果您在 tsconfig 中启用所有严格检查,则无法将 null 传递给定义为字符串的属性。这是一件好事,您不想看到任何“无法读取 null 的属性‘长度’”错误消息。

关于javascript - TypeScript - 区分 null 类型和 null 对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51090385/

相关文章:

javascript - ajax 调用后无法访问原型(prototype)模型中的构造函数变量

Javascript Canvas 绘制矩形不起作用,试图制作游戏板

php - 链接不调用 JS 函数

javascript - jquery 屏蔽输入只有第一个数字可选其余强制

typescript - Typescript 接口(interface)通常存储在应用程序中的什么位置?

javascript - ReactJS 与 TypeScript 未渲染到 DOM

javascript - 用于选择国家的下拉菜单,然后是州,然后是地区

javascript - 根据多个值过滤数组

javascript - 将对象数组转换为已排序的数组数组

带有默认参数值的 typescript 条件返回类型