如何在Config对象内部引用自身属性?解决变量提前使用错误
解决方案:在Config对象的FAQ中引用邮箱地址避免重复硬编码
你遇到的问题是在初始化config对象时,试图在faqs的answer里引用config.email,但此时config还没完成声明,所以触发了"Block scoped variable 'used' before it's declaration"错误。核心需求是避免重复硬编码邮箱地址,同时让代码正常运行。下面提供几种可行的解决办法:
方法1:提取独立的邮箱变量
最直接的方式是把邮箱地址先抽成单独的变量,然后在config的两个地方都引用这个变量。既避免了重复硬编码,也不会出现提前引用的问题。
interface Config { email: string; faqs: Array<FAQ>; } export interface FAQ { question: string; answer: string; } // 把邮箱单独提取成变量 const SUPPORT_EMAIL = "fake@gmail.com"; export const config: Config = { email: SUPPORT_EMAIL, faqs: [ { question: 'simple question', answer: 'I want to refer to ' + SUPPORT_EMAIL + ' here' }, ], };
方法2:用工厂函数初始化对象
如果不想额外声明变量,可以用自执行的工厂函数来创建config。函数内部先定义邮箱,再构建完整对象,这样就能在faqs里直接引用内部的邮箱值。
interface Config { email: string; faqs: Array<FAQ>; } export interface FAQ { question: string; answer: string; } export const config: Config = (() => { const email = "fake@gmail.com"; return { email, faqs: [ { question: 'simple question', answer: 'I want to refer to ' + email + ' here' }, ], }; })();
方法3:用getter动态生成回答(可选)
如果后续邮箱可能需要动态修改,或者想保持对象结构的关联性,可以给FAQ的answer设置为getter。不过要注意调整FAQ接口的类型定义,让answer支持getter返回的字符串。
interface Config { email: string; faqs: Array<FAQ>; } export interface FAQ { question: string; get answer(): string; // 修改为getter类型 } export const config: Config = { email: "fake@gmail.com", faqs: [ { question: 'simple question', get answer() { return 'I want to refer to ' + config.email + ' here'; } }, ], };
内容的提问来源于stack exchange,提问作者Joe Tito
相关产品推荐
相关产品推荐

