具有返回类型的打字稿查询类型

时间:2020-02-27 23:25:07

标签: typescript

我如何根据作为参数提供的键名告诉打字稿什么是返回类型:

type A = string
type B = number

type Data = {
    a: A,
    b: B
}

const getProp = (data: Data, key: keyof Data) => {
    return data[key]
}

const myData: Data = {
    a: 'foo',
    b: 123
}

// Type 'string | number' is not assignable to type 'string'.
// Type 'number' is not assignable to type 'string'.

        ^  
const result: string = getProp(myData, 'a')

我知道我正在使用道具a,因此预期的返回类型为字符串。 请问我该如何运作? playground

1 个答案:

答案 0 :(得分:2)

您需要一个通用类型:

const getProp = <K extends keyof Data>(data: Data, key: K): Data[K] => {
    return data[key]
}

之所以行之有效,是因为可以在呼叫站点将K推断为字符串文字类型'a'(确实扩展了keyof Data),然后返回的返回类型为{{1} }是Data[K],即Data['a']