gpt4 book ai didi

typescript - 如何使用 TypeScript 从接口(interface)动态推断类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:23 25 4
gpt4 key购买 nike

typescript Docs描述如何使用函数重载。

在以下用例中是静态定义的重载函数的示例。

interface MyObject {
a: boolean
b: number
}

const myObject: MyObject = {
a: true,
b: 1
}

function getValueOfMyObject (key: 'a'): boolean
function getValueOfMyObject (key: 'b'): number
function getValueOfMyObject (key: keyof MyObject): boolean | number {
return myObject[key]
}

所以,

getValueOfMyObject('a') 将有一个 boolean 作为返回类型,并且

getValueOfMyObject('b') 将有一个 number 作为返回类型。

对于我的用例,我不想为 MyObject 接口(interface)中的每个新属性键入更多重载。我正在寻找具有动态返回类型的解决方案。 TypeScript 根据 MyObject 接口(interface)自动推导返回类型的一种方式。像这样的东西:

function getValueOfMyObject (key: keyof MyObject): typeof MyObject[key] {
return myObject[key]
}

但这似乎不是正确的语法。有什么方法可以使用 TypeScript 实现这一点吗?

最佳答案

您只需要一个类型参数来捕获调用函数时使用的实际文字类型。使用此类型参数,我们可以索引到 MyObject 类型。

interface MyObject {
a: boolean
b: number
}

const myObject: MyObject = {
a: true,
b: 1
}
function getValueOfMyObject<K extends keyof MyObject>(key: K): MyObject[K] {
return myObject[key]
}
getValueOfMyObject('a') // K is 'a', returns boolean
getValueOfMyObject('b') // K is 'b', returns number

关于typescript - 如何使用 TypeScript 从接口(interface)动态推断类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52722748/

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