typeguards - TypeScript: Bộ bảo vệ kiểu cho kiểu tùy chỉnh
Mục tiêu: Cố gắng tạo một bộ bảo vệ kiểu cho một kiểu tùy chỉnh.
Đây là kiểu tùy chỉnh của tôi:
type AppProviders = 'box' | 'dropbox' | 'google';
Đây là lần đầu tiên tôi thử tạo type guard, nhưng điều này có vẻ thừa khi khai báo giá trị được phép hai lần:
type AppProviders = 'box' | 'dropbox' | 'google';
const appProviders: AppProviders[] = [ 'box', 'dropbox', 'google' ];
function isAppProviders(provider): provider is AppProviders {
return appProviders.includes(provider)
}
Có cách nào tốt hơn để thực hiện kiểm tra kiểu cho các kiểu literal tùy chỉnh không?
Cảm ơn
Câu trả lời #1
Lý do bạn nhận được lỗi đó là vì:
https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-aliases
type Easing="ease-in" | "ease-out" | "ease-in-out";
Kiểu literal chuỗi cho phép bạn xác định giá trị chính xác một chuỗi phải có. Trong thực tế, kiểu literal chuỗi kết hợp tốt với các kiểu hợp nhất (union types), bảo vệ kiểu (type guards) và bí danh kiểu (type aliases). Bạn có thể sử dụng các tính năng này cùng nhau để có hành vi giống enum với chuỗi.
Tôi đã phải tra cứu điều này.... ví dụ tôi tìm thấy là https://www.damirscorner.com/blog/posts/20200619-StringLiteralTypeGuardInTypescript.html
export const APP_PROVIDERS = ['a', 'b'] as const;
export type AppProviders = typeof APP_PROVIDERS[number];
export function isAppProviders(unknownString: string): unknownString is AppProviders {
return (APP_PROVIDERS as unknown as string[]).includes(unknownString);
}
