无需函数:如何从参数/对象推断TypeScript泛型类型?
无需辅助函数实现泛型Alpha的类型自动推断
可以实现,TypeScript提供了两种无需辅助函数的方案,具体如下:
方案1:使用satisfies关键字(TypeScript 4.9+ 推荐)
satisfies关键字允许你指定变量需符合Alpha<T>的结构约束,同时保留变量字面量的具体类型,TypeScript会自动推断出泛型参数T的实际类型。
示例代码:
type Alpha<T> = { enabled: boolean; params: T; }; // TS自动推断T为 { title: string },alpha的类型为Alpha<{ title: string }> const alpha = { enabled: true, params: { title: "hello", }, } satisfies Alpha<unknown>;
这里Alpha<unknown>仅用于约束结构,TypeScript会根据params的实际值自动推导T的具体类型,最终变量alpha的类型会被正确推断为Alpha<{ title: string }>。
方案2:类型断言结合typeof
先定义字面量对象,再通过typeof获取params的类型,最后断言为Alpha<T>:
type Alpha<T> = { enabled: boolean; params: T; }; // 先定义字面量,保留原始类型信息 const temp = { enabled: true, params: { title: "hello" } }; // 断言为Alpha<typeof temp.params>,TS自动推断T为{ title: string } const alpha = temp as Alpha<typeof temp.params>;
这种方式兼容性更好,适用于所有支持泛型的TypeScript版本。
注意:直接使用Alpha作为类型注解不可行
你尝试的const alpha: Alpha = { ... }写法无效,因为TypeScript要求泛型类型作为类型注解时必须显式传入类型参数;若给T设置默认值(如type Alpha<T = unknown> = { ... }),变量类型会被固定为默认类型(Alpha<unknown>),无法自动推断T的具体类型,不符合需求。
内容的提问来源于stack exchange,提问作者sshmaxime
相关产品推荐
相关产品推荐

