首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在类型记录中通用地键入对象

如何在类型记录中通用地键入对象
EN

Stack Overflow用户
提问于 2021-06-10 10:19:11
回答 1查看 27关注 0票数 0

我有一个设置对象,并希望为如下函数提供单个键值对:

代码语言:javascript
运行
复制
const settings = {
  time1: 40 * 60 * 60,
  time2: 10 * 60 * 60,
  breaks: [
    { limit: 6 * 60 * 60, length: 30 * 60 },
    { limit: 9 * 60 * 60, length: 15 * 60 },
  ],
}

// works
function changeSetting1<T extends keyof typeof settings>(details: {key: T, value: typeof settings[T]}): void {
//
}

// doesn't work
type func_details = <T extends keyof typeof settings>{key: T, value: typeof settings[T]}
function changeSetting2(details: func_details): void {

changeSetting1({key: "time1", value: 8 * 60 * 60})
changeSetting2({key: "time1", value: 8 * 60 * 60})

虽然当我直接在函数中键入它时,它似乎可以工作,但TypeScript抱怨说,当我第一次定义类型func_details时,需要有一个(。这样做的正确语法是什么?

TS游乐场

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-10 10:25:18

首先,您有一个语法错误。类型的定义应该是:

代码语言:javascript
运行
复制
type func_details<T extends keyof typeof settings> = {key: T, value: typeof settings[T]};

其次,由于函数接受带有泛型类型的参数,因此函数本身必须具有满足extends keyof typeof settings条件的泛型参数。

代码语言:javascript
运行
复制
function changeSetting2<T extends keyof typeof settings>(details: func_details<T>): void {
  // [...]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67919217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档