微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ts 中扩展外部 js 对象属性时的 this 关键字

如何解决在 ts 中扩展外部 js 对象属性时的 this 关键字

我正在将代码库从 js 转换为 ts 并偶然发现一个难题:扩展外部 js 对象属性 getter 和 setter。

interface Player {
    name: string;
    position: { x: number; y: number };
    _posHistory: [{ x: number; y: number }];
    structures: Structures[];
}
Object.defineProperty(Player.prototype,"position",{
    get() {
        return this.pos;   // i get "Unsafe member access .pos on an any value"
    },set(pos) {
        this._posHistory.push(pos);  //same here
        this.pos = pos;              //and here
    },configurable: false
});

在这种情况下,如何向 TS 键入提示“this”关键字,使其不是“any”?

解决方法

首先,您尝试将 Player 用作值,但它被定义为一种类型。您可以将类的接口转换为能够在 defineProperty 方法上使用它。

其次让我感到遗憾的是 Object.defineProperty 方法缺乏类型定义。但我会给你一个帖子的链接,以创建一个完整的类型化方法来使用。

https://fettblog.eu/typescript-assertion-signatures/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。