【问题标题】:How can we define object type interface in typescript?我们如何在打字稿中定义对象类型接口?
【发布时间】:2018-02-22 18:35:45
【问题描述】:

我想定义一个包含对象和不同类型的接口 比如

export interface example {
   code: string;
   category : {
     name : string,
     reference: string,
     sequence : number
   };
}

定义上没有问题,但是调用like后没有问题

ex = {} as example;
ex.category.name ='electric; 

这不起作用并出现以下错误

错误错误:未捕获(承诺中):TypeError:无法设置未定义的属性“名称” TypeError:无法设置未定义的属性“名称”

有一些相似的主题,但它们并不完全相关。 (How to define object in type script interfaceHow can I define the types of an object variable in Typescript?

感谢您协助寻找解决方案。

【问题讨论】:

  • 你还是要创建第一级对象:ex.category = {};,或者直接去let ex = { category: { name: 'electric' } };。接口只是描述了shape,你还是要构建正确的对象(或者写一个带有构造函数的类,或者提供默认值)。
  • 题主有问题吗?

标签: typescript interface


【解决方案1】:

Type assertions 并不意味着该对象肯定是您在运行时断言的形状。你可以断言任何对象是任何类型的,但如果你的运行时类型不匹配,它最终会在运行时失败。

在您的示例中,ex 对象没有 category 属性,因此在运行时它将是 undefined,这会导致您的错误。

您也可以在您的对象中初始化category 属性:

var ex = {
    category: {} // or you can initialize `name` here as well
} as example;
ex.category.name = 'electric'; 

【讨论】:

  • 谢谢,这个答案帮助我清除了一个非常基本的疑问。我被困了一整天。所有其他帖子都解释了创建类、初始化接口。但是如果接口很大,添加一大块代码来初始化所有对象是没有完成的。
猜你喜欢
  • 2016-08-29
  • 1970-01-01
  • 2020-03-07
  • 2019-01-02
  • 1970-01-01
  • 2021-12-16
  • 2023-02-07
  • 2020-08-01
  • 2023-01-05
相关资源
最近更新 更多