Typescript:索引签名参数类型不能是文本类型或泛型类型

xyhw6mcr  于 2023-02-10  发布在  TypeScript
关注(0)|答案(1)|浏览(415)

我在尝试创建一个简单的打字程序,
其约束对象匹配给定的接口数据类型。
例如,我有一个接口Config和一个模式对象
我希望abc.value被限制为字符串,而xyz.value被限制为number

interface Config {
  abc: string
  xyz: number
}

const schema: XXX = {
  abc: {
    value: '',
  },
  xyz: {
    value: 0,
  },
}

我尝试使用infer关键字,但无法让它正常工作。

const schema: Record<T extends keyof Config ? infer keyof Config : any, any> = {
  abc: {
    value: '',
  },
  xyz: {
    value: 0,
  },
}

我做错了什么?任何帮助都将不胜感激
谢谢你。

ifmq2ha2

ifmq2ha21#

请使用mapped types

interface Config {
    abc: string
    xyz: number
}

type Mapped<T> = {
    [Prop in keyof T]: {
        value: T[Prop]
    }
}

const schema: Mapped<Config> = {
    abc: {
        value: '2',
    },
    xyz: {
        value: 0,
    },
}

Playground

相关问题