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
答案 0 :(得分:1)
这是一种更好的方法:
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;
}
答案 1 :(得分:1)
您已经定义了具有两个必需属性的接口。因此,当您使用Person接口的类型定义对象时,必须立即定义这些属性,如下所示:
let person: Person = {
name: '',
surname: ''
}
但是,如果您认为这些属性不是必需的,而是可选的,则可以将界面更改为此:
interface Person {
name?: string;
surname?: string;
}
使用?
语法将属性标记为可选。然后,下面的代码应该起作用:
let person: Person = {};