javascript - 如何从对象创建模板文字类型以具有键=值?

标签 javascript typescript

我有一个对象

{
  foo: "bar",
  a: "b",
  roses: "red",
}

我想创建一个模板文字,它会给我以下可能性:

"foo=bar" | "a=b" | "roses=red" 

所以基本上,键=值

到目前为止我所做的是:

type Foo = `${keyof typeof obj}=${typeof obj[keyof typeof obj]}`;

但这给了我所有可能的组合:

"foo=bar" | "foo=b" | "foo=red" | "a=bar" | ...

我觉得我需要使用一个泛型,但我无法让它工作

最佳答案

您可以使用自索引mapped type :

const obj = {
  foo: "bar",
  a: "b",
  roses: "red",
} as const;

type Foo = {
    [K in keyof typeof obj]: `${K}=${typeof obj[K]}`
}[keyof typeof obj];

计算结果为:

type Foo = "foo=bar" | "a=b" | "roses=red"

Playground link

关于javascript - 如何从对象创建模板文字类型以具有键=值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72628227/

相关文章:

javascript - Javascript 中 C++ std::unordered_map<char, int> 的等价物是什么?

typescript - 基于 Zod 模式将接口(interface)通用化

javascript - 如何仅加载波形并等待用户单击 'play' 以在 Wavesurfer-js 上下载音频?

javascript - vscode : [ts] Experimental support for decorators is a feature that is subject to change

javascript - 如何使用react-testing-library测试material ui MenuList组件上的按键事件

html - prime ng 侧边栏组件标题内容未显示

html - 如果单击禁用按钮,则通过 ngClass 添加类

javascript - 动态加载 firebase 模块? (v9)

javascript - Cloud Functions 中的 Cloud Messaging : admin. messaging(...).send 不是函数

javascript - 从 url 中去除哈希值