typescript 库中的类型扩充

vcudknz3  于 2023-05-30  发布在  TypeScript
关注(0)|答案(1)|浏览(146)

我想用TypeScript写一个带有vitest custom matcher函数的库。
在文档之后,我添加了一个vitest.d.ts文件,并进行了必要的扩充。这工作正常,但我的问题是,任何其他导入我的库的项目都不知道这个增强,所以调用新的匹配器会导致TypeScript错误:

expect(data).toMatchTheTypicalExpectations()
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

error TS2339: Property 'toMatchTheTypicalExpectations' does not exist on type 'Assertion<Data>'.

当然,每个人都可以自己添加增强功能,但不知何故,将增强功能也输出会更好。

vmdwslir

vmdwslir1#

在尝试了很多事情之后,我找到了解决问题的方法。
首先,我添加了一个vitest.ts(不是d.ts!)文件到我的库的源文件夹中,包含增强:

export * from "vitest"

declare module 'vitest' {
  interface Assertion<T> {
    toMatchTheTypicalExpectations(): T
  }
  interface AsymmetricMatchersContaining {
    toMatchTheTypicalExpectations(): unknown
  }
}

现在,我已将以下行添加到主index.ts文件中

import "./vitest.js"

构建库的类型包括vitest.d.ts及其在index.d.ts中的包含,因此库的任何用户实际上都知道它。

相关问题