无法为索引类型的类型属性赋值

时间:2018-05-15 21:11:01

标签: typescript

我的界面定义为:

export interface IGenericChannelSuggestion {
  emailText?: string;
  emailHtml?: string;
  sms?: string;
  [other: string]: string;
}

旨在允许任何属性名称(也就是"其他"键),但为常用的常用名称提供建议。然后我有一个班级:

class TypedTemplate<T = IDictionary, O = IGenericChannelSuggestion> { ... }

其中Ogenerate()方法将返回的输出类型。默认情况下,它将回退到上面的IGenericChannelSuggestion。但是,令我惊讶的是,当我开始实现将通用类型放入generate()时,我在初始化输出时遇到此错误:

enter image description here

这使我感到困惑,因为IGenericChannelSuggestion上没有必需的属性。我猜可能TypeScript还不确定该类型是对象类型,但我相当确定我之前已经做过这个。

现在,当我添加以下行时更加奇怪 - 只是为了测试 - 直接在下面:

enter image description here

不确定我在这里遇到了什么,或者确切地说,可以分配什么来键入 O

1 个答案:

答案 0 :(得分:3)

  

这使我感到困惑,因为IGenericChannelSuggestion

上没有必需的属性

通用约束意味着最小属性集,而不是最大。因此,如果某人将O设置为IGenericChannelSuggestion子类型并且除了必需属性之外,那么构建您的课程是合法的。您定义的可选项。当发生这种情况时,{}将缺少必需的属性,并且当有人观察{}对象期望找到他们在IGenericChannelSuggestion子类型中定义的强制属性时,您将有一个损坏的程序