有没有一种方法可以在不使用函数的情况下推断泛型类型



是否可以仅使用类型来推断值的泛型类型?

例如类型:

interface MyType<T extends string> {
foo: Record<T, any>,
bar: Record<string, T>
}

您可以使用以下函数来推断泛型:

function typed<T extends string>(val: MyType<T>) {
return val;
}
// Works! no typescript diagnostics.
typed({
foo: { a: null, b: null },
bar: { whatever: 'a' }
}) // expect MyType<'a'|'b'>

是否存在可以在没有函数的情况下推断出的仅类型语法?(当然没有在泛型中指定类型参数(

// Does not work! (Generic type 'MyType<T>' requires 1 type argument(s).)
const myType: MyType = {
foo: { a: null, b: null },
bar: { whatever: 'a' }
}

不,这目前不是TypeScript的一个功能(从TS 4.4开始(。您正在寻找类似于microsoft/TypeScript#338349上的功能请求,该请求将使用infer关键字来要求编译器从上下文推断类型(所以您会说const myType: MyType<infer>或类似的东西(。此请求被关闭为microsoft/TypeScript#7481的副本,这是一个长期存在的问题,要求以某种方式在上下文中键入具有类型的值,而不扩展到该类型。无论哪种情况,它都不是直接支持的东西。通常建议的解决方法是创建一个像typed()这样的通用标识函数,这样您目前正在做的工作就和它一样好。哦,好吧。

相关内容

最新更新