R. *_*bub 3 typescript reactjs typescript-typings react-typescript
我是打字稿新手。陷入终端错误。Type 'string | null' is not assignable to type 'string'
const myModel = {
name: values.name || null ,
};
Run Code Online (Sandbox Code Playgroud)
const Field = "myplace";以及最初设置字符串的函数,它应该是字符串。
const MyFunction = () => {
const Field = "myplace";
... ... rest code here
Run Code Online (Sandbox Code Playgroud)
它正在按预期工作;显示终端错误。如何消除终端错误?我在定义类型错误时犯了错误吗?谢谢。
TypeScript 抱怨的原因就是这一行。如果值、地点或名称未定义、为 null 或 false,则名称将为 null。如果 name 可以为 null,则不能在需要字符串的函数中使用它,因为 null 不是字符串。
...
-> name: values?.place?.name || null
}
Run Code Online (Sandbox Code Playgroud)
您需要确保 name 属性始终是字符串,即使输入值不是字符串,也可以通过为其指定一个实际上是字符串的默认值:
-> name: values?.place?.name || "some default string"
Run Code Online (Sandbox Code Playgroud)
另外,您正在使用布尔逻辑运算符,但您确实应该使用空合并运算符:
const myModel = {
id: values?.place?.id ?? <default id>,
name: values?.place?.name ?? <default name>,
};
Run Code Online (Sandbox Code Playgroud)
如果为 true,则该||运算符返回左侧值,否则返回右侧值。所以0 || 5返回5,但是1 || 5返回1。nullish 合并运算符执行相同的操作,但检查左侧值是否为 null 或未定义:0 ?? 1returns 0,但null ?? 0returns 0。
最大的区别在于字符串:
// s is a string or null
const v = s || "default"
// s is null: v is "default"
// s is undefined: v is "default"
// s is "": v is "default" <--- IMPORTANT! "" is a valid string, but it's "false"
// otherwise: v is s
const v = s ?? "default"
// s is null: v is "default"
// s is undefined: v is "default"
// otherwise: v is s
Run Code Online (Sandbox Code Playgroud)
与可选链相结合,这变得非常强大:
// If either a, b, c or d are null or undefined, v is undefined
const v = a?.b?.c?.d;
// If either a, b, c or d are null or undefined, v is "hello"
const v = a?.b?.c?.d ?? "hello";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8547 次 |
| 最近记录: |