我正在将一些 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/