gpt4 book ai didi

Typescript,如何从另一个属性值推断类型?

转载 作者:行者123 更新时间:2023-12-03 23:45:16 30 4
gpt4 key购买 nike

例如,我有一个带有属性的接口(interface):keyvalue ,我想通过键来推断值类型。

interface Obj { a: number; b: string }

interface Param<K extends keyof Obj> {
key: K
value: Obj[K] // I want to infer this type
}

const p: Param<keyof Obj> = {
key: 'a',
value: '', // typescript can't infer this type, expect number
}

我怎样才能做到这一点 ?

最佳答案

Obj[K]表示可以通过索引 Obj 获得的值通过 K 中的任何值,而不仅仅是 key是。
因此,要使用此结构,您需要指定更紧密地使用哪个键:

interface Obj { a: number; b: string }

interface Param<K extends keyof Obj> {
key: K
value: Obj[K]
}

const p: Param<'a'> = { // changed line
key: 'a',
value: '', // error
}
遗憾的是,无法推断出泛型参数。

如果您已经知道 Obj 中的内容,可能有更好的方法来做到这一点。
interface AParam {
key: 'a'
value: number
}

interface BParam {
key: 'b'
value: string
}

type Param = AParam | BParam;

const p: Param = {
key: 'a',
value: '', // error
}
如果您需要变量 p,这是唯一可行的方法。能够持有 key ,但仍有 value是正确的类型。

关于Typescript,如何从另一个属性值推断类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63186539/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com