You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript如何编写可接受指定模型扩展类型的自定义类型

解决方案

你需要的自定义Inside类型可以通过构造目标类型的所有属性子集的联合类型实现,既不需要将属性标记为可选携带undefined,也可以匹配所有被目标类型继承的父类型结构:

type AllSubsets<T> = 
  T extends never ? never :
  ({} extends T ? {} : never) |
  { [K in keyof T]: Pick<T, K> & AllSubsets<Omit<T, K>> }[keyof T];

type Inside<T> = AllSubsets<T>;

使用示例

interface Resp1Model { a: number }
interface Resp2Model { b: string }
export interface StateModel extends Resp1Model, Resp2Model {}

let someVariable: any;
// 和你期望的用法完全一致
let some: Inside<StateModel> = someVariable as Resp2Model; // 类型校验合法
let someOther: Inside<StateModel> = someVariable as Resp1Model; // 类型校验合法
let fullState: Inside<StateModel> = someVariable as StateModel; // 完整类型赋值同样合法

补充说明

  • 如果你可以接受属性被显式赋值为undefined,不需要额外自定义类型,直接使用TypeScript内置的Partial<T>即可满足需求,用法完全相同。
  • 如果你的目标类型属性数量较多(超过20个),上述AllSubsets实现可能存在类型计算性能问题,这种场景推荐开启TypeScript的exactOptionalPropertyTypes编译选项后直接使用Partial<T>,即可实现可选属性不默认包含undefined的效果。

内容的提问来源于stack exchange,提问作者Fatih Ersoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:57:04