如何在多泛型类中跳过未指定泛型,仅定义所需类型?
解决方案:跳过泛型参数使用默认类型
嘿,这个问题我之前也碰到过!好在TypeScript在后续版本里加入了专门的特性来解决这种只需要指定部分泛型参数的场景,下面分两种情况给你讲清楚:
方法一:使用泛型参数占位符(TS 4.4+ 推荐)
从TypeScript 4.4版本开始,你可以用_作为泛型参数的占位符,它会自动对应到该位置的默认类型。这样你就能精准指定第三个泛型,同时让前两个使用默认的string和number:
// 先定义你的自定义类型 type CustomType = { id: number; name: string }; // 用_占位前两个泛型参数,仅指定第三个 let mainClass2 = new MainClass<_, _, CustomType>();
这样实例化出来的mainClass2中:
propA还是默认的string类型propB还是默认的number类型propC变成了你指定的CustomType类型
方法二:工厂函数封装(兼容旧TS版本)
如果你的项目还在使用低于4.4的TypeScript版本,没法用占位符的话,可以写一个简单的工厂函数来封装类的实例化,把需要自定义的泛型参数单独暴露:
// 工厂函数,固定前两个泛型为默认值,只暴露第三个参数 function createMainClass<C = boolean>() { return new MainClass<string, number, C>(); } // 直接指定CustomType即可 let mainClass2 = createMainClass<CustomType>();
这个方法通过封装把不需要自定义的泛型参数固定为默认值,只对外暴露你需要修改的那个参数,同样能达到目的。
为什么之前的写法不行?
早期TypeScript要求泛型参数必须按顺序完整指定:要么全用默认(不写<>),要么从第一个开始逐个指定,没法跳过前面的参数直接指定后面的。4.4版本引入的占位符特性就是专门解决这种“部分自定义泛型”的场景。
内容的提问来源于stack exchange,提问作者Rueta
相关产品推荐
相关产品推荐

