如何在TypeScript中使用stage 3提案特性 以Array.prototype.at()为例
Array.prototype.at() 报错的解决方案
Property 'at' does not exist on type 'number[]'报错的核心原因是TypeScript 4.5版本才正式内置Array.prototype.at()的类型定义,你使用的4.3.5版本暂不支持,可按需选择以下方案:
- 方案1:升级TypeScript版本
直接将TypeScript升级到4.5及以上版本即可原生支持该特性,升级命令参考:npm install typescript@latest --save-dev
升级完成后在tsconfig.json的lib字段中加入ES2022或ESNext即可正常使用。 - 方案2:不升级版本的兼容处理
如果受项目约束无法升级TypeScript版本,可手动补充全局类型声明:在项目的类型声明文件(通常命名为global.d.ts,需确保文件在tsconfig.json的include配置范围内)中添加如下代码:
若需要低版本运行时环境支持,还需引入对应polyfill,比如从core-js引入// 补充所有数组类的at方法类型定义 interface Array<T> { at(index: number): T | undefined; } interface ReadonlyArray<T> { at(index: number): T | undefined; } interface Int8Array { at(index: number): number | undefined; } interface Uint8Array { at(index: number): number | undefined; } interface Uint8ClampedArray { at(index: number): number | undefined; } interface Int16Array { at(index: number): number | undefined; } interface Uint16Array { at(index: number): number | undefined; } interface Int32Array { at(index: number): number | undefined; } interface Uint32Array { at(index: number): number | undefined; } interface Float32Array { at(index: number): number | undefined; } interface Float64Array { at(index: number): number | undefined; } interface BigInt64Array { at(index: number): bigint | undefined; } interface BigUint64Array { at(index: number): bigint | undefined; }core-js/features/array/at,或安装独立的array.prototype.atpolyfill包。
TypeScript使用stage3阶段提案的通用方法
- 第一步:确认类型支持状态
TypeScript团队通常会在提案进入stage3阶段后评估加入类型支持,首先查询你使用的TypeScript版本是否已经内置该特性的类型定义,若已内置,直接在tsconfig.json的lib字段中加入对应标准库标识(通常是ESNext)即可。 - 第二步:手动补充类型声明
若当前TypeScript版本未内置对应类型,可通过扩展全局接口的方式手动编写类型声明,补充对应方法、属性的类型定义。 - 第三步:添加运行时polyfill
TypeScript仅负责类型校验,不会自动注入运行时特性实现,要在实际运行环境中使用提案特性,需要引入对应polyfill,常用来源包括core-js、对应提案的官方polyfill包等。
内容的提问来源于stack exchange,提问作者Wenfang Du
相关产品推荐
相关产品推荐

