在ts中使用Object.defineProperty( )
/ Object.defineProperties( )
时,会发现其中的this类型为any,导致种种不快。例如下图,理想情况下this
的类型应该为 Room
如何为this
上类型?其实查看`Object.defineProperty`的类型声明可以看到有一个ThisType<any>类型,这是ts专门预留的一个标识符。
所以,我们只需要让我们传入的属性描述对象具有 ThisType<你想要的this类型>
类型就可以了
可以简单的在尾部使用as,也可以将PropertyDescriptor单独声明为带this类型的变量然后传给Object.defineProperties
此外,你也可以为函数提供this
参数。不用担心会导致参数错位,ts在编译成js后会去掉this参数。
思考:在类型声明文件中我们可以看到,微软为this
默认指定了any
类型而不是T
。不幸的是官方并没有给出这样做的理由。在 https://github.com/microsoft/TypeScript/issues/49162 中我们可以看到部分讨论。
很惭愧的是,笔者由于尚未接触过复杂情况,想不到什么好例子。。
Comments | 1 条评论
博主 匿名
#私密# 下次做个返回键,手机浏览太不方便了