UNPKG

enum-plus

Version:

A drop-in replacement for native enum. Like native enum but much better!

185 lines (129 loc) 5.69 kB
# 迁移指南 (v2到v3) ## 🛠 enum.values 行为变更 `enum.values` 属性原计划是要移除的,但[经过一些讨论后](https://github.com/shijistar/enum-plus/issues/13),我们决定保留它并改变其功能:它现在表示成员原始值的数组。因此,如果你仍在使用旧的 `values`,请改为使用 `enum.items`## 🛠 符号变更 以下符号已被重命名,以更好地反映其用途: - `ENUM_COLLECTION` 变更为 `IS_ENUM` - `ENUM_ITEM` 变更为 `IS_ENUM_ITEM` - `ENUM_ITEMS` 变更为 `IS_ENUM_ITEMS` ```diff - import { ENUM_COLLECTION, ENUM_ITEM, ENUM_ITEMS } from 'enum-plus'; + import { IS_ENUM, IS_ENUM_ITEM, IS_ENUM_ITEMS } from 'enum-plus'; - WeekEnum[ENUM_COLLECTION]; // true + WeekEnum[IS_ENUM]; // true const Monday = WeekEnum.items[0]; - Monday[ENUM_ITEM]; // true + Monday[IS_ENUM_ITEM]; // true - WeekEnum.items[ENUM_ITEMS]; // true + WeekEnum.items[IS_ENUM_ITEMS]; // true ``` ## 🛠 AntDesign 相关方法被迁移到插件库 - `enum.toSelect` - `enum.toMenu` - `enum.toFilter` - `enum.toValueMap` 上述方法已从核心库中移除并迁移到 [@enum-plus/plugin-antd](https://www.npmjs.com/package/@enum-plus/plugin-antd) 包中。它们现在作为插件的一部分提供。请安装该插件并参考插件文档以了解用法。 以下方法已被弃用并永久移除,但它们都有替代方法,请改用替代方法。 - _**enum.options**_ 请改用 `enum.toSelect`- _**enum.menus**_ 请改用 `enum.toMenu`- _**enum.filters**_ 请改用 `enum.toFilter`- _**enum.valueMaps**_ 请改用 `enum.toValueMap`## 🛠 类型变更 - `EnumValuesArray` 已被弃用并替换为 `EnumItemsArray````diff - import { EnumValuesArray } from 'enum-plus'; + import { EnumItemsArray } from 'enum-plus'; ``` - `IEnumValues` 已重命名为 `IEnumItems````diff - import { IEnumValues } from 'enum-plus'; + import { IEnumItems } from 'enum-plus'; ``` ## 🛠 扩展 Enum 类型的方式已更改 在 v2 中,扩展 Enum 类型的方式是使用全局类型的接口合并: _enum-extension.d.ts_ ```ts declare global { export interface EnumExtension<T, K, V> { hello(): string; } } ``` 在 v3 中,使用模块声明的方式进行接口合并,同时还可以把功能实现和类型声明合并到一个文件中。 _my-enum-extension.ts_ ```ts import { Enum } from 'enum-plus'; // 功能实现 Enum.extends({ hello() { return '你好,EnumPlus!'; }, }); // 类型声明 declare module 'enum-plus/extension' { export interface EnumExtension<T, K, V> { hello(): string; } } ``` 然后在项目的入口文件中导入这个文件: _index.js_ ```ts import './my-enum-extension'; WeekEnum.hello(); // '你好,EnumPlus!' ``` 这样做的好处是避免了全局命名空间污染,并且可以更清晰地看到扩展是针对哪个模块的。 ## 🛠 推荐升级 TypeScript 至 5.0 虽然 enum-plus v3 仍然支持 TypeScript 3.8 及更高版本,但我们强烈建议升级到 TypeScript 5.0 或更高版本,以获得最佳体验。 这是因为 v3 利用了 TypeScript 5.0 引入的一些新特性,如 [const 类型参数](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html#const-type-parameters),这些特性可以显著提升类型推断和代码的可维护性。现在,你不再需要在 Enum 初始化时使用 `as const` 断言。Enum 现在可以默认使用字面量对象进行初始化。 #### 升级 TypeScript ```bash npm install typescript@^5.0 --save-dev ``` #### 修改 tsconfig.json - **如果你已经升级到 TypeScript 5.0 或更高版本:** 请检查 `tsconfig.json` 中的 `moduleResolution` 配置,确保其值是**除了** `node``node10` **之外**的其他值,那么你不需要做任何额外的修改。 如果因为特殊原因,你必须将 `moduleResolution` 设置为 `node``node10`,那么你将被自动切换到兼容模式的类型系统,不会享受到自动 `as const` 带来的便利性,因此你可能需要手动添加 `as const` 断言。如果你坚持希望使用现代版本的类型定义,请修改 `tsconfig.json``paths` 配置,手动映射到现代模式的类型定义: ```js { "compilerOptions": { "baseUrl": ".", "paths": { "enum-plus": ["./node_modules/enum-plus/lib/index.d.ts"], "enum-plus/*": ["./node_modules/enum-plus/lib/*"] } } } ``` - **如果你仍在使用 `4.x` 或更低版本的 TypeScript:** 请检查 `tsconfig.json` 中的 `moduleResolution` 配置,确保其被设置为 `node``node10`,将确保你使用的是兼容版本的类型定义。兼容版本模式会自动从类型定义中移除 [const 类型参数](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html#const-type-parameters) 特性,否则会导致所有枚举的类型都变成 `any`。另外,你需要在初始化 Enum 时手动添加 `as const` 断言,以确保更优的类型推断。 如果由于特殊原因你必须将 `moduleResolution` 设置为 `node``node10` 之外的其他值,那么你需要修改 `tsconfig.json``paths` 配置,手动映射到兼容版本的类型定义: ```js { "compilerOptions": { "baseUrl": ".", "paths": { "enum-plus": ["./node_modules/enum-plus/types-legacy/pre-v5/index.d.ts"], "enum-plus/*": ["./node_modules/enum-plus/types-legacy/pre-v5/*"] } } } ``` #### 修改项目代码 以前: ```ts const WeekEnum = Enum({ Sunday: 0, Monday: 1, } as const); ``` 现在: ```ts const WeekEnum = Enum({ Sunday: 0, Monday: 1, }); ```