如何定义在Object中包含可选数据的TypeScript接口?
我的意思是:
color?: string;
我知道您可以使用'?'定义可选数据像这样的标志:
let myObj: IMyInterface =
{
name: "theName",
data:
{
size: 10,
color: "red",
moreOptionalData: { x: 'y' } // This line will throw an error (incampatable interface)
}
};
但如何在对象内定义附加可选数据
ERROR Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[NgbTypeahead -> NgbTypeaheadConfig]:
StaticInjectorError(Platform: core)[NgbTypeahead -> NgbTypeaheadConfig]:
NullInjectorError: No provider for NgbTypeaheadConfig!
Error: StaticInjectorError(AppModule)[NgbTypeahead -> NgbTypeaheadConfig]:
StaticInjectorError(Platform: core)[NgbTypeahead -> NgbTypeaheadConfig]:
NullInjectorError: No provider for NgbTypeaheadConfig!
答案 0 :(得分:1)
索引签名本身表示对象可以具有某些基于键的值,并且因为它没有任何值,所以没有多少意思将其指定为可选 - 原因TSC不允许将其指定为可选通过?
:https://github.com/Microsoft/TypeScript/issues/7118
答案 1 :(得分:0)
感谢CRice的评论和OJ-Kwon的见解,解决方案很简单,我不得不放弃'?'登录。
export interface IMyInterface
{
name: string;
data:
{
size: number;
color?: string;
[any: string]: any; // optional additional data (no need for '?')
};
};
let myObj: IMyInterface =
{
name: "theName",
data:
{
size: 10,
color: "red",
moreOptionalData: { x: 'y' } // Now it's OK
}
};