You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript类内枚举赋值P=p可行,外部报错,该操作作用是什么?

类中P = p操作的本质及类外报错原因

首先明确:枚举p在TypeScript里不只是一个类型,编译后会变成一个真实存在的JavaScript对象,包含所有枚举成员的键值对(比如你例子里的p编译后是{ a: 'a', b: 'b' })。

类内部P = p的具体实现

在类X里写P = p,本质是给类的实例定义一个名为P的属性,并把枚举对象p本身赋值给这个属性。

编译后的JavaScript代码会把这个赋值逻辑放到类的构造函数里,大概长这样:

// 枚举编译后的JS代码
var p;
(function (p) {
    p["a"] = "a";
    p["b"] = "b";
})(p || (p = {}));

// 类编译后的JS代码
class X {
    constructor() {
        this.P = p; // 实例化时给this.P赋值枚举对象p
    }
}

也就是说,每次创建X的实例,这个实例都会有一个P属性,值就是整个枚举p的对象。

类外部直接P = p报错的原因

在类外部直接写P = p,TypeScript会认为你在给一个未声明的变量赋值。严格模式下,TypeScript不允许隐式创建全局变量,所以会抛出类似“Cannot assign to 'P' because it is not a variable”的错误。

如果要在类外做类似操作,你需要先声明变量P,比如:

let P = p; // 合法,提前声明了变量P

内容的提问来源于stack exchange,提问作者user963241

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:45:38