TypeScript对象内用this访问自身属性报错:Property "" does not exist on type never 如何解决?
解决对象字面量中
this访问内部属性的TypeScript错误 问题原因
在对象字面量初始化阶段,this并不指向当前正在创建的对象。严格模式下此处this为undefined,非严格模式下指向全局对象,因此TypeScript会推断this的类型为never,自然无法找到b属性,抛出错误。
解决方案
1. 使用getter方法
将c定义为getter函数,函数内部的this会在访问obj.c时正确指向当前对象,TypeScript也能正确推断类型:
const obj = { a: "1", b: "2", get c() { return this.b; }, }; console.log(obj.c); // 输出 "2"
2. 先创建对象再追加属性
先定义基础对象,之后再为c赋值,直接通过对象本身访问b属性:
const obj = { a: "1", b: "2", }; obj.c = obj.b; console.log(obj.c); // 输出 "2"
3. 使用工厂函数创建对象
如果对象逻辑复杂或需要复用,可通过工厂函数封装创建逻辑,既可以结合getter使用this,也可以提前提取共用值避免依赖this:
// 方式一:结合getter function createObj() { return { a: "1", b: "2", get c() { return this.b; }, }; } const obj = createObj(); // 方式二:提取共用值 function createObj() { const bValue = "2"; return { a: "1", b: bValue, c: bValue, }; } const obj = createObj();
内容的提问来源于stack exchange,提问作者Dharmik soni
相关产品推荐
相关产品推荐

