javascript 错误:类型“{}”缺少类型中的以下属性

rqcrx0a6  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(215)
interface Person {
  name: string;
  surname: string;
}
let person1: Person = {};

person1.name = "name"
person1.surname = "surname"

当我声明person1时,我得到这个错误:
Type '{}' is missing the following properties from type Person

13z8s7eq

13z8s7eq1#

这是一个更好的方法:

let person1: Person = {name: '', surname: ''};

但是如果你想要完全空的对象,你可以像这样破解它:

let person1: Person = {} as Person;

评论后更新:
看看这个unpredictableFunction

const unpredictableFunction = (): string|number|string[] => {
  return Math.random() > 0.5 ? 'string' : Math.random() > 0.5 ? 9999 : ['1', '2', '3']
};

它可以返回数字,或者返回字符串,或者返回字符串数组

const person: Person = {name: '', surname: ''};
person.name = unpredictableFunction (); // this is a case you are talking about

在这种情况下你会看到
Type 'string | number | string[]' is not assignable to type 'string'.
答案如下:
查看您的代码并确保仅将字符串分配给Person属性,
或更新接口以准备不同的值:

interface Person {
  name: string | number | string[];
  surname: string; 
}
f0brbegy

f0brbegy2#

您已经定义了一个具有两个必需属性的接口。所以当你定义一个Person接口类型的对象时,你必须像这样定义这些属性:

let person: Person = {
    name: '',
    surname: ''
}

但是,如果您认为这些属性不是必需的,而是可选的,则可以将接口更改为:

interface Person {
    name?: string;
    surname?: string;
}

使用?语法可以将属性标记为可选。下面的代码应该可以工作:

let person: Person = {};
dpiehjr4

dpiehjr43#

在Typescript2.0中,我们可以做得更好
let person1 ! : Person;
此“!”是非空Assert运算符
根据文件
new!post-fix表达式运算符可用于在类型检查器无法得出该事实的上下文中Assert其操作数为非空和非未定义。具体来说,操作X!生成一个x类型的值,不包括null和undefined。类似于x和x作为T的类型Assert,在发出的JavaScript代码中简单地删除了非空Assert运算符。

jdzmm42g

jdzmm42g4#

把这个加到你的 typescript 里
}|{};

相关问题