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

TypeScript:如何让静态create方法从调用类推断泛型类型?

解决方案

要实现子类调用create时自动推断返回类型,关键是利用TypeScript的静态方法this类型和InstanceType工具类型,无需手动传入泛型参数。

修改后的代码如下:

class Base {
    static create<T extends typeof Base>(this: T, data?: Partial<InstanceType<T>>): InstanceType<T> {
        const record = new (Object.getPrototypeOf(this))();
        Object.assign(record, data);
        return record as InstanceType<T>;
    }
}

class Parent extends Base {
    name = '';
    age?: number;
}

// 自动推断返回类型为Parent,无需手动传泛型
const record = Parent.create();
console.log(record.name); // 类型安全,不会报错

// 传入data时也会自动校验类型
const recordWithData = Parent.create({ name: 'Alice', age: 30 });
console.log(recordWithData.age); // 类型正确

关键说明

  • 静态方法的this类型:静态方法中的this指向调用该方法的类构造函数,通过this: T约束T为当前类的构造函数类型。
  • InstanceType工具类型:InstanceType<T>可以从类构造函数类型T中提取出实例类型,让返回值自动对应调用类的实例。
  • Partial类型:给data参数加上Partial<InstanceType<T>>,确保传入的data符合实例的属性结构,同时允许仅传入部分属性。

这样修改后,Base类及其子类调用create时,都能自动推断出正确的返回类型,完全不需要手动指定泛型参数,保持了调用方式的简洁性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:38