typescript - TypeScript:自定义类型的类型保护
问题描述
目标:尝试为自定义类型创建类型保护。
这是我的自定义类型:
type AppProviders = 'box' | 'dropbox' | 'google';
这是我第一次尝试创建type guard,但这在两次声明允许值时似乎是多余的:
type AppProviders = 'box' | 'dropbox' | 'google';
const appProviders: AppProviders[] = [ 'box', 'dropbox', 'google' ];
function isAppProviders(provider): provider is AppProviders {
return appProviders.includes(provider)
}
有没有更好的方法来为自定义文字类型做类型保护?
谢谢
解决方案
您收到该错误的原因是:
https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-aliases
type Easing = "ease-in" | "ease-out" | "ease-in-out";
字符串文字类型允许您指定字符串必须具有的确切值。在实践中,字符串文字类型与联合类型、类型保护和类型别名很好地结合在一起。您可以一起使用这些功能来获得类似枚举的字符串行为。
我必须查一下......我找到的例子是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): key is AppProviders {
return (APP_PROVIDERS as string[]).includes(unknownString as AppProviders);
}
推荐阅读
- python - 如何使用嵌套的 for 循环解决 numba 降低错误?
- maven - Dspace 安装在内核失败
- flask - 无法使用 boto3 和烧瓶上传到 s3
- javascript - 如何在 ng-bootstrap 上使用 NgNav 渲染可滚动的垂直导航?
- javascript - 打字稿:是否可以只为导出类型中的一个键设置状态?
- c# - 如何在c#中对相似值数组进行分组
- swift - 使用 Realm freeze() 方法获取整个 Swift 项目中的对象是否安全?
- reactjs - react-material-ui-carousel 的问题 - 不能在一行中显示三张卡片
- linux - 将用户标签(字符串)分配给 pid?
- mysql - 如何使用 sequelize.js 批量更新记录并忽略某些列