我的界面定义为:
export interface IGenericChannelSuggestion {
emailText?: string;
emailHtml?: string;
sms?: string;
[other: string]: string;
}
旨在允许任何属性名称(也就是"其他"键),但为常用的常用名称提供建议。然后我有一个班级:
class TypedTemplate<T = IDictionary, O = IGenericChannelSuggestion> { ... }
其中O
是generate()
方法将返回的输出类型。默认情况下,它将回退到上面的IGenericChannelSuggestion
。但是,令我惊讶的是,当我开始实现将通用类型放入generate()
时,我在初始化输出时遇到此错误:
这使我感到困惑,因为IGenericChannelSuggestion
上没有必需的属性。我猜可能TypeScript还不确定该类型是对象类型,但我相当确定我之前已经做过这个。
现在,当我添加以下行时更加奇怪 - 只是为了测试 - 直接在下面:
不确定我在这里遇到了什么,或者确切地说,可以分配什么来键入 O 。
答案 0 :(得分:3)
这使我感到困惑,因为
上没有必需的属性IGenericChannelSuggestion
通用约束意味着最小属性集,而不是最大。因此,如果某人将O
设置为IGenericChannelSuggestion
的子类型并且除了必需属性之外,那么构建您的课程是合法的。您定义的可选项。当发生这种情况时,{}
将缺少必需的属性,并且当有人观察{}
对象期望找到他们在IGenericChannelSuggestion
子类型中定义的强制属性时,您将有一个损坏的程序