javascript - 对象文字键值作为类型(Typescript)。我做对了/做对了吗?
问题描述
我有文字对象,我希望能够将它用作函数中的参数,例如
const SOCIAL_PROVIDER = {
Google: 'Google',
Facebook: 'Facebook'
}
handle(SOCIAL_PROVIDER.Google) // OK
handle(SOCIAL_PROVIDER.Twitter) // want TS to throw error
handle('Google') // want TS to throw error
然后是函数签名类型,我让它工作的唯一方法如下
type SocialProvider = {
Google: 'Google',
Facebook: 'Facebook'
};
const SOCIAL_PROVIDER: SocialProvider = {
Google: 'Google',
Facebook: 'Facebook'
};
type handle = (value: keyof typeof SOCIAL_PROVIDER) => void
我做得对还是正确处理?还是有更好的方法?
谢谢。
解决方案
就我个人而言,我认为仅使用您的 Providers 创建一个类型既好又简单..
例如..
type SOCIAL_PROVIDER = 'Google' | 'Facebook';
const SOCIAL_PROVIDER_HANDLE: Record<SOCIAL_PROVIDER, string> = {
Facebook: 'FB',
Google: 'GOOGLE'
}
function handle(provider: SOCIAL_PROVIDER) {
console.log(SOCIAL_PROVIDER_HANDLE[provider]);
}
handle('Google') // OK
handle('Twitter') // want TS to throw error
如果你想保持干燥,另一个想法。例如。在上面Google
并Facebook
重复,您可以让 TS 为您构建类型。
例如。
const SOCIAL_PROVIDER_HANDLE = {
Facebook: 'FB',
Google: 'GOOGLE'
};
type SOCIAL_PROVIDER = keyof typeof SOCIAL_PROVIDER_HANDLE;
function handle(provider: SOCIAL_PROVIDER) {
console.log(SOCIAL_PROVIDER_HANDLE[provider]);
}
handle('Google') // OK
handle('Twitter') // want TS to throw error
推荐阅读
- angular - Angular 7 中的路由和授权
- javascript - 锚标记不能使 div 可点击
- android - 将 Android Job 迁移到 Android Work 管理器
- python - 如何使用 Python 按值搜索嵌套的 JSON
- java - 更新依赖项后使用 TableGenerator 的 ConstraintViolationException
- matlab - matlab中的两个最小值
- json - 从根为数组的 jsonpath 获取元素值
- cordova - 我想在应用程序从 ionic3 中的堆栈中删除时执行函数
- html - 使用 DOT 语法从父目录添加 HTML 文件
- logging - 我想为每种类型登录不同的文件,并为每个线程登录不同的目录