Xóa mục nhập khỏi enum typecript
Tôi có một enum
export enum FloorTypeEnum {
ENGINEERED_HARDWOOD = 'engineered_hardwood',
SOLID_HARDWOOD = 'solid_hardwood',
LAMINATE = 'laminate',
LVT_VINYL = 'vinyl',
CARPET = 'carpet',
RUG = 'rug',
CERAMIC = 'ceramic',
CONCRETE = 'concrete',
EPOXY = 'epoxy',
FLOOR = 'floor', // deprecated value for backward compatibility
}
Vì vậy, tại một nơi, tôi muốn sử dụng enum này nhưng loại bỏ giá trị không dùng nữa ( Floor). Có cách nào chúng tôi có thể làm?
Tôi đã thử bên dưới
export type NewFloorTypeEnum = {
[key in Exclude<FloorTypeEnum , FloorTypeEnum .Floor> ]?: string
};
Tôi cũng đang duy trì một enum kế thừa
export enum LegacyFloorTypeEnum {
FLOOR = 'floor'
}
Nhưng tôi đang bối rối về cách sử dụng loại đó. Tôi muốn sử dụng khóa và giá trị của enum và quay lại giao diện người dùng. Yêu cầu cuối cùng là nhận được một enum tương đương với FloorTypeEnum - LegacyFloorTypeEnum. Tôi không muốn tạo một enum mới cho các giá trị sàn mới.
Cảm ơn
Trả lời
Nếu tôi hiểu bạn một cách chính xác, những thứ như thế này có đủ không?
export enum FloorTypeEnum {
ENGINEERED_HARDWOOD = 'engineered_hardwood',
SOLID_HARDWOOD = 'solid_hardwood',
LAMINATE = 'laminate',
LVT_VINYL = 'vinyl',
CARPET = 'carpet',
RUG = 'rug',
CERAMIC = 'ceramic',
CONCRETE = 'concrete',
EPOXY = 'epoxy',
FLOOR = 'floor', // deprecated value for backward compatibility
}
enum LegacyFloorTypeEnum {
FLOOR = 'floor',
NOT_FLOOR = 'not_floor'
}
type NewFloorTypeEnum<T> = {
[K in keyof T]: T[K];
}
// test case
const ok: NewFloorTypeEnum<FloorTypeEnum> = LegacyFloorTypeEnum.NOT_FLOOR;
Tôi không tin rằng Typecript có thể chặn FLOOR vì cả hai đều chia sẻ cùng một khóa / giá trị (tôi có thể sai trong giả định này vì vậy xin vui lòng xem xét một chút). Tuy nhiên, nếu bạn có một giá trị mới, trong ví dụ này tôi đã sử dụng NOT_FLOOR, nó sẽ xuất hiện một lỗi nếu bạn cố gắng sử dụng một giá trị trong enum không khớp với FloorTypeEnum.
Hãy cho tôi biết nếu điều này không đáp ứng nhu cầu của bạn. Chúc bạn viết mã vui vẻ.