在 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 来创建一个完整的类型化方法来使用。
我正在将代码库从 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 来创建一个完整的类型化方法来使用。