混合手动声明和推断类型

时间:2021-02-04 08:44:17

标签: typescript

考虑以下 TypeScript:(Playground)

type Settings = {
    stringVal: string,
    nestedVal: { boolVal: boolean }
    // ... lots more properties ...
}
declare const settings: Settings

const settingGetters: { [prop: string]: (s: Settings) => any } = {
    "string value": s => s.stringVal,
    "boolean value": s => s.nestedVal.boolVal,
    // ... lots more getters ...
}

const val = settingGetters["boolean value"](settings)

我希望 val 的类型为 boolean,因为它调用了布尔值的 getter。然而,它实际上是类型 any,因为 getter 被声明为总是返回类型 any

当我写 any 时,我不想将函数声明为实际返回 any;相反,我希望 TypeScript 从函数定义本身推断实际类型。显然,使用 any 不是正确的方法。

通过单独声明每个 getter 的参数类型来解决这个问题很简单:

const settingGetters: {
    "string value": (s: Settings) => s.stringVal,
    "boolean value": (s: Settings) => s.nestedVal.boolVal,
    // ...
}

但是,会有很多 getter,我希望避免为每个 getter 显式键入参数类型。我更愿意将参数类型与整个对象的单一类型统一起来。

如何定义混合了手动定义类型和推断类型的类型?

0 个答案:

没有答案
相关问题