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

TypeScript中如何扩展原始类型类,让实例被识别为原生原始类型

解决方案

你遇到的是TypeScript类型层面的限制,运行时new NumberInput(1) + 1本身可以正常执行(JS会自动调用继承自Number的valueOf()方法获取原始值参与运算),只需要让TypeScript类型系统把NumberInput实例识别为兼容number原始类型即可。

核心实现方案

利用TypeScript的声明合并特性,新增一个和类同名的接口,让NumberInput类型同时兼容number原始类型:

export class NumberInput extends Number {
  // 此处编写你自定义的类逻辑,示例如下:
  double() {
    return this.valueOf() * 2
  }
}

// 关键:同名接口合并,让实例兼容number类型
export interface NumberInput extends number {}

效果验证

修改完成后,不需要额外的类型断言或者手动调用valueOf(),代码可以直接通过类型检查:

// 算术运算直接生效
const x = new NumberInput(1) + 1 
// 类型推断x为number,运行时结果为2

// 自定义方法也可以正常调用
const y = new NumberInput(3).double()
// 类型推断y为number,运行时结果为6

实现原理

TypeScript中同名的类和接口会自动合并类型,通过让接口继承number,相当于给NumberInput的实例类型追加了number原始类型的兼容性,既保留了类本身的自定义方法能力,又可以直接作为原始数值参与运算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:36:00