【问题标题】:Error: Type '{}' is missing the following properties from type错误:类型“{}”缺少类型中的以下属性
【发布时间】:2020-05-23 18:46:59
【问题描述】:
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

【问题讨论】:

  • 你为什么不内联 name 和 surname 属性的设置 - 一个空对象不是人,并且通过强制转换为任何你有点违背打字稿的意义
  • 这就是接口的用处,对吧?定义对象所需的属性。如果您希望它们是可选的,您可以这样做:name?: string;

标签: javascript typescript object interface


【解决方案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; 
}

【讨论】:

  • 这行得通,但是在分配值时我得到了这个错误:(property) Person.name: stringType 'string |号码 | string[]' 不可分配给类型 'string'。
  • 您是按字面意思指定“名称”还是其他?
  • @ShamPooSham,不确定我是否在关注你
  • 感谢@qiAlex,很好的解释。只是觉得奇怪的是我的值绝对是一个字符串,但由于某种原因它仍然给我这个错误。在我的真实项目中,我的值来自输入,所以它是一个字符串!一旦我添加到.String(value) 就可以了,但我发现这是多余的。关于为什么会发生这种情况的任何想法?
  • @ShamPooSham 您关于取决于您如何获得价值的评论让我思考并帮助我现在理解为什么会发生此错误!!!非常感谢,最后我使用了“字符串”,但我知道它背后的原因!你是明星!
【解决方案2】:

您已经定义了一个具有两个必需属性的接口。因此,当您使用 Person 接口类型定义对象时,您必须立即定义这些属性,如下所示:

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

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

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

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

let person: Person = {};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 2020-04-07
    • 1970-01-01
    • 2021-04-20
    • 2021-07-29
    • 1970-01-01
    • 2023-02-07
    • 2020-10-28
    相关资源
    最近更新 更多