TypeScript类数组遍历报错:Property 'booted'不存在于string类型
问题原因
你用for...in遍历数组时,拿到的不是数组里的Provider类,而是数组的索引字符串(比如"0"),所以VSCode会提示'booted' does not exist on type 'string'——字符串本身当然没有你定义的静态方法。
解决方案
把遍历方式改成直接遍历数组元素的形式,以下是几种可行方案:
方案1:使用for...of(最直观)
修改boot方法内的循环逻辑:
import Provider from "./Provider"; export default class { static boot(providers: Array<Provider>) { for (const provider of providers) { provider.booting(); } for (const provider of providers) { provider.booted(); } } }
方案2:使用数组forEach方法
import Provider from "./Provider"; export default class { static boot(providers: Array<Provider>) { providers.forEach(provider => { provider.booting(); }); providers.forEach(provider => { provider.booted(); }); } }
方案3:普通for循环(兼容旧环境)
import Provider from "./Provider"; export default class { static boot(providers: Array<Provider>) { for (let i = 0; i < providers.length; i++) { providers[i].booting(); } for (let i = 0; i < providers.length; i++) { providers[i].booted(); } } }
额外注意:请确认Provider基类已正确定义静态的booting和booted方法,保证子类继承的类型约束有效。
内容的提问来源于stack exchange,提问作者jdion84
相关产品推荐
相关产品推荐

