MST

星途 面试题库

面试题:TypeScript中如何正确注解this类型以解决类方法中this指向问题

假设有一个TypeScript类,其中包含一个方法,该方法在异步操作中需要正确引用类实例的属性。请编写代码展示如何通过注解this类型来确保this在异步操作中指向类实例本身。例如:class MyClass { private myProperty: string = 'example'; async myMethod() { // 在此处编写异步操作代码,确保正确获取myProperty } }
14.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
class MyClass {
    private myProperty: string = 'example';
    async myMethod() {
        const self = this;
        return new Promise<void>((resolve) => {
            setTimeout(() => {
                console.log(self.myProperty);
                resolve();
            }, 1000);
        });
    }
}

上述代码中,通过在myMethod方法内部创建self常量,存储this的引用,在异步操作(setTimeout)中使用self来访问类实例的属性myProperty,确保this在异步操作中指向类实例本身。

如果非要使用this类型注解,可以这样写:

class MyClass {
    private myProperty: string = 'example';
    async myMethod(this: MyClass) {
        return new Promise<void>((resolve) => {
            setTimeout(() => {
                console.log(this.myProperty);
                resolve();
            }, 1000);
        });
    }
}

在方法定义async myMethod(this: MyClass)中,通过this: MyClass明确指定this的类型为MyClass,这样在异步操作内部使用this时,就能确保其指向类实例本身。