运行MDN示例代码报错:Property 'Locale' does not exist on typeof Intl 如何解决
错误原因
Intl.Locale是ES2020(ES11)标准新增的内置API,出现这个报错的核心原因是当前运行/编译环境不支持该API,常见场景包括:
- 浏览器版本过旧,未内置该API实现
- Node.js版本低于12.x,该版本才首次原生支持
Intl.Locale - TypeScript项目未配置兼容ES2020+的类型声明库,导致编译阶段识别不到该属性
对应解决方法
前端浏览器场景
如果需要兼容低版本浏览器,安装polyfill补全能力即可:
- 安装依赖:
npm install @formatjs/intl-locale - 在项目入口文件最顶部引入:
import '@formatjs/intl-locale/polyfill'
Node.js场景
优先升级Node.js到12.x及以上的LTS版本,不想升级的话也可以安装上面提到的polyfill兼容。
TypeScript编译报错场景
修改项目根目录的tsconfig.json配置,在compilerOptions的lib字段中加入ES2020及以上的标准库声明:
{ "compilerOptions": { "lib": ["ES2020", "DOM", /* 其他原有配置 */], "target": "ES2020" /* 也可以根据实际情况设置为更高版本 */ } }
同时确保TypeScript版本不低于3.2,更早的TS版本没有内置Intl.Locale的类型定义。
你提到的测试代码可以在支持ES2020的环境中正常运行,运行后会输出预期的日志结果:
const korean = new Intl.Locale('ko', { script: 'Kore', region: 'KR', hourCycle: 'h24', calendar: 'gregory', }); const japanese = new Intl.Locale('ja-Jpan-JP-u-ca-japanese-hc-h12'); console.log(korean.baseName, japanese.baseName); // expected output: "ko-Kore-KR" "ja-Jpan-JP" console.log(korean.hourCycle, japanese.hourCycle); // expected output: "h24" "h12"
内容的提问来源于stack exchange,提问作者kastaplastislife
相关产品推荐
相关产品推荐

