javascript - Typescript 基于数组推断对象键
问题描述
我正在尝试根据数组的值创建一个具有特定键的对象。
这是代码:
type AllowedKeys = "foo" | "bar" | "baz"
interface Options {
keys: AllowedKeys[]
}
interface AllTypesDeclaration {
foo: string[];
baz: object[];
bar: number[];
}
function createObj(arg: Options): Pick<AllTypesDeclaration, typeof arg.keys[number]> {
return {}
}
const myObj = createObj({ keys: ['baz'] })
// This should work:
myObj.baz
// This should fail:
myObj.foo
myObj.bar
如您所见,我尝试使用 来执行此操作Pick
,但这似乎不起作用。
演示:这里
解决方案
为此,您将需要泛型,否则键的类型将不受输入的限制。
function createObj<T extends AllowedKeys[]>(arg: { keys: T })
: Pick<AllTypesDeclaration, typeof arg.keys[number]> {
return {}
}
推荐阅读
- html - 将导航栏的位置设置为固定会使下拉菜单停止工作
- kotlin - Kotlin Android 10 的通知中没有自定义声音
- android - 通过 ForegroundService 获取位置时应用程序崩溃
- javascript - 使用元素索引而不是值副本创建数组引用
- php - 如何从来自 JSON 的 JSON 执行 foreach 循环
- javascript - 仅从 pouchDB 中的 iso 字符串获取日期
- javascript - 我的代码是使用异步等待的最佳方式吗?
- javascript - Ramda:将键值数组转换为对象
- sql - 基于列的字段重复
- javascript - 如何比较 Moment.js 日期?