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

时间:2020-02-07 15:43:20

标签: javascript typescript object interface

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

2 个答案:

答案 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 = {};