所以我正在开发Angular项目并创建此界面以显示一些数据:
public Question[] getQuestions ()
{
// code for assigning the values that I wrote above.
}
如果我想显示在我的数据库中添加更多数据,我将不得不将这些数据点添加到此接口,有没有办法动态创建接口,或在组件构造器中创建它?
答案 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
}
这可能接近您正在寻找的那种“动态”行为。假设您的属性需要是具有UserData
所有属性和额外extraProperty
的对象。
您可以这样输入。
fancyUserData: UserData & { extraProperty: string }
使用交集类型,您可以临时添加属性。
简而言之,没有你不能真正构建动态类型,绝对不能在组件的构造函数中。但是,您可以使用我上面提到的方法根据需要扩展和模制您的接口。