【发布时间】:2017-12-08 11:03:04
【问题描述】:
我正在Typescript 2.3.4 中构建一个Angular 4 项目。我不知道下面的代码有什么问题。
IDialog界面
export interface IDialog{
cancellable?: boolean,
inputs?: Array<{label: string, value?: any, description?: string}|string>
message: string
title?: string,
type?: DialogInputTypes // <- an Enum
}
SampleComponent.ts
public dialog:IDialog = {
cancellable:false,
title:'Dialog Title',
message:'This is a modal dialog',
type:DialogInputTypes.button,
inputs:[
{label:'OK', value:'OK'},
{label:'Cancel', value:'Cancel'}
]
};
SampleComponent.html
<input *ngFor="let input of dialog.inputs" [value]="input.value">
^^^^^^^^^^^^
编译器抛出此错误:
Angular:未定义标识符“值”。
<anonymous>不包含这样的成员
我刚刚从Angular 2升级到Typescript 2.0,之前没有出现这个错误。
为什么会抛出这个错误?也许这与 IDialog.inputs 被定义为数组或字符串这一事实有关,并且在编译时,编译器无法知道哪些形状输入具有。如果我从界面中删除|string,错误就会消失。
更重要的是,我不知道如何修复我的代码。
【问题讨论】:
-
我想知道
[value]="input.value"是否应该是[value]="input?value",因为它是在接口中声明的。 -
谢谢。使用
input?.value没有区别。我认为错误与IDialog.inputs被定义为数组或字符串这一事实有关,并且在编译时编译器无法知道inputs具有哪种形状。我只是在猜测 -
我同意@BeetleJuice,我怀疑它与作为IDialog 接口一部分的“|string”有关。您需要将其转换为正确的类型。
-
我认为这不是问题所在。不过它很容易测试,只需删除
|string并查看错误是否仍然存在。 -
@HarryNinh 如果我删除
|string,错误就会消失,但这不是解决方案,因为有时该成员是一个字符串。因此,进行此更改会在其他地方引发错误。
标签: angular typescript interface