添加属性到接口typescript

时间:2018-01-13 15:16:24

标签: angular typescript

所以我正在开发Angular项目并创建此界面以显示一些数据:

public Question[] getQuestions ()
{
// code for assigning the values that I wrote above.
}

如果我想显示在我的数据库中添加更多数据,我将不得不将这些数据点添加到此接口,有没有办法动态创建接口,或在组件构造器中创建它?

1 个答案:

答案 0 :(得分:10)

您不能动态更改/创建接口,因为它只是一个静态值,用于由Typescript编译器进行结构类型检查。

但是,如果您需要该界面上的所有属性和其他属性,您可以执行以下操作:

使用extends

在组件上创建一个通用类型,如下所示:

@Component({
  selector: 'example'
  template: `<h1>example</h1>`
})
export class ExampleComponent<T extends UserData> {}

现在您可以拥有类型为T且必须包含所有UserData属性的数据,然后添加您想要的任何其他属性。

您还可以使用extends为此特定情况创建新界面。

interface ExtendedUserData extends UserData {
 someOtherProperty: string
}

使用Intersection types

这可能接近您正在寻找的那种“动态”行为。假设您的属性需要是具有UserData所有属性和额外extraProperty的对象。

您可以这样输入。

fancyUserData: UserData & { extraProperty: string }

使用交集类型,您可以临时添加属性。

简而言之,没有你不能真正构建动态类型,绝对不能在组件的构造函数中。但是,您可以使用我上面提到的方法根据需要扩展和模制您的接口。