Freshness会进行更严格的对象字面量检查,用来确保对象字面量在结构上类型兼容
结构类型兼容规则:如果两个类型的结构一样,就说它们是互相兼容的,且可以相互赋值的(即如果类型x要兼容类型y,那么类型y至少具有与类型x相同的属性)
Freshness 特性
如上所述,只要满足结构类型兼容规则的两个类型便可相互兼容。那是否有例外存在呢?让我们看下面的例子:
1 | interface Named { |
虽然为变量p赋予的字面值完全符合结构类型兼容规则,但它却抛出异常,这主要是由TypeScript中的Freshness特性导致,该特性会对对象字面量进行更为严格的类型检测:只有目标变量的类型与该对象字面量的类型完全一致,对象字面量才可能赋值给目标变量,否则抛出类型错误,我们可以通过类型断言消除异常:
1 | let p: Named; |