关于额外的属性检查的困惑

来源:3-11 接口 - 额外属性检查+函数类型+可索引的类型

内六角

2019-12-13

接口额外的属性检查一节中:

还有最后一种跳过这些检查的方式,这可能会让你感到惊讶,它就是将这个对象赋值给一个另一个变量: 因为 squareOptions 不会经过额外属性检查,所以编译器不会报错。

let squareOptions = { colour: 'red', width: 100 }
let mySquare = createSquare(squareOptions)

要留意,在像上面一样的简单代码里,你可能不应该去绕开这些检查。

对这段描述很困惑, 按我的理解ts会去检查createSquare函数调用时传递的参数类型,另起一个变量做参数为什么就不检查这个参数了?而且我们实际工作中都是另起变量作为函数参数的,这样做也不是开发者故意要去绕开这些检查啊?
很困惑,这让我感觉TS就像是魔法一样。

写回答

1回答

ustbhuangyi

2019-12-13

这个是 TS 的实现机制决定的只检查字面量还不检查函数。猜测 TS 这么做的原因是变量检查难度比较大比如变量的来源追溯可能会非常复杂而字面量就非常容易了。

0
2
小学生6年级
使用的 3.7.5 版本,已经会检查这种变量的形式了。
2020-03-09
共2条回复

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2629 学习 · 877 问题

查看课程