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

将JS包重写为TS时,如何复用d.ts中的类型定义?

复用已有.d.ts类型定义,避免TS重写时重复定义

我正在将JS编写的小型包aws-sdk-mock重写为TypeScript,该包已有现成的index.d.ts类型定义文件。想请教如何复用这个文件中的类型,避免在index.ts里重复编写类型定义代码。

相关代码示例

原JS实现(index.js):

const AWS = {};
AWS.mock = function(service, method, replace) {
  // 实现逻辑
}

module.exports = AWS

已有类型定义(index.d.ts):

export function mock<C extends ClientName, M extends MethodName<C>>(
  service: C,
  method: M,
  replace: ReplaceFn<C, M>,
): void;

我当前的TS重构代码(index.ts):

/// <reference path="index.d.ts" />
import { mock } from '.';

type AWS_MOCK = {
  mock?: typeof mock
}

const AWS: AWS_MOCK = {}

// 这里怎么定义类型才能复用index.d.ts里的定义,不用重复写?
AWS.mock = function(service, method, replace) {

}

ESLint已经通过AWS_MOCK类型识别出AWS.mock应有的函数类型,但我不确定是否需要像下面这样重复写index.d.ts里的泛型和参数类型:

AWS.mock = function<C extends ClientName, M extends MethodName<C>>
                              (service: C, method: M, replace: ReplaceFn<C, M>) {
}

这种重复写法很冗余,尤其是当mock有多个重载类型时。有没有更高效的方式?


解决方案:无需重复定义类型,利用TS自动推断或类型提取

1. 依赖类型推断自动校验

因为AWS已经被AWS_MOCK类型约束,TypeScript会自动根据typeof mock的类型来校验你赋值的函数,完全不需要手动重复写泛型和参数类型:

/// <reference path="index.d.ts" />
import { mock } from '.';

type AWS_MOCK = {
  mock?: typeof mock
}

const AWS: AWS_MOCK = {}

// TS会自动推断参数、泛型约束和返回值类型,无需手动定义
AWS.mock = function(service, method, replace) {
  // 实现你的逻辑即可
}

此时如果你的函数参数或返回值不符合index.d.ts里的定义,TS会直接抛出错误,相当于自动复用了已有类型。

2. 显式提取函数类型(更清晰的写法)

如果想让代码意图更明确,可以先提取mock的函数类型,再用它约束实现函数:

/// <reference path="index.d.ts" />
import { mock } from '.';

// 从已有mock导出中提取函数类型
type MockFunction = typeof mock;

// 直接用提取的类型约束实现函数
const mockImplementation: MockFunction = (service, method, replace) => {
  // 实现逻辑
};

const AWS = {
  mock: mockImplementation
};

或者用类型断言简化写法:

const AWS = {
  mock: (service, method, replace) => {
    // 实现逻辑
  } as MockFunction
};

注意事项

  • 确保index.d.ts中用到的辅助类型(如ClientName、MethodName、ReplaceFn)是可导出的,或者能通过typeof mock间接访问到,否则TS会提示类型找不到的错误。
  • 如果mock有多个重载类型,typeof mock会自动包含所有重载,TS会对实现函数进行全量校验,无需手动逐个定义重载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:11:17