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

this keyword when extending external js objects properties in ts

我正在将代码库从 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 用作值,但它被定义为一种类型。您可以将 class 的接口转换为能够在 defineProperty 方法上使用它。

其次,令我遗憾的是 Object.defineProperty 方法缺少类型定义。但是我会给你一个 link 到一个 post 来创建一个完整的类型化方法来使用。

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