如何在TypeScript接口对象中定义可选数据?

时间:2018-01-15 23:36:07

标签: typescript interface optional

如何定义在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!

2 个答案:

答案 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
   }   
};