奇怪的现象
先来看以下现象, ts检测类型检测系统检测到了错误的发生。因为我们增加了一个IPerson中没有定义的属性类型。
当我们做了一个操作后,奇怪的事情发生了...把原来定义的对象字面量赋值给info后, 再让info这个对象的标识符赋值给IPerson类型的obj, 这时候居然检查通过了, 没有报错!
对这个奇怪的现象解释: ts中如果我们第一次创建一个对象字面量赋值给某对象类型的变量的时候, ts会进行严格的字面量类型赋值检测。因为第一次创建的字面量具有fresh的特性。那么如果通过二次赋值的形式赋值给对象类型的变量, 此时字面量就会失去fresh特性, 进而ts类型检测系统就不会进行严格字面量类型赋值检测。
严格字面量类型赋值检测问题中前提是字面量中必须保证已经实现了所有对象类型中的属性后针对新增加的属性进行的。