提问人:Lomírus 提问时间:7/20/2023 更新时间:7/20/2023 访问量:48
“ThisType”不会影响包装器内方法中的“this”
`ThisType` does not affect the `this` in the method inside a wrapper
问:
我想在下面的代码中访问,编译器可以按预期推断出 as number 的类型。this.data.a
this.data.a
function defineComponent<T, U>(
options: {
data: T;
methods: U;
} & ThisType<{ data: T }>
): void {}
defineComponent({
data: {
a: 1,
},
methods: {
fn() {
console.log(this.data.a)
},
},
});
但是,当我想包装 with 时,我无法访问 this,因为编译器告诉我fn()
throttle()
'this' implicitly has type 'any' because it does not have a type annotation.
function defineComponent<T, U>(
options: {
data: T;
methods: U;
} & ThisType<{ data: T }>
): void {}
function throttle<T extends Function>(fn: T, time: number) {
return fn;
}
defineComponent({
data: {
a: 1,
},
methods: {
fn: throttle(function () {
console.log(this.data.a)
}, 1000),
},
});
那么我怎样才能让编译器将这个类型推断为 for?在 Kotlin 中,我可以用来指定要使用的,但在 TS 中不受支持。也许我可以写成 ,但是编写编译器应该为开发人员完成的函数太多余了。我也试过了,但是,它也无法推断出 的类型。fn()
ThisType
options
this@xxx
this
thorottle(function(this: { data: a }) { /* ... */}, 1000)
throttle<typeof this>()
this
答: 暂无答案
评论
ThisType<T>
this
fn2
fn3
throttle()
fn3
void
fn
fn3
fn2
defineComponent({ methods: { fn() { /* ... */ }}, lifetimes: { created() {this.fn = throttle(this.fn, 1000 )} } });
created()
defineComponent
fn
throttle(fn)