如何测试 typescript 声明文件针对本地 js 库进行编译

问题描述 投票:0回答:2

我已将打字稿定义添加到 HunterLarco/twitter-v2 ,其结构如下:

package.json
src/
  twitter.js
  twitter.d.ts
  Credentials.js
  Credentials.d.ts

并且我想测试

.js
文件是否与
.d.ts
声明文件匹配。

目前进展

我现在就用这个

tsconfig.json

{
  "compilerOptions": {
    "allowJs": true,
    "allowSyntheticDefaultImports": true,
    "alwaysStrict": true,
    "baseUrl": ".",
    "forceConsistentCasingInFileNames": true,
    "lib": ["es2018"],
    "module": "commonjs",
    "moduleResolution": "node",
    "noFallthroughCasesInSwitch": true,
    "paths": { "twitter-v2": ["src"] },
    "typeRoots": [
      "./node_modules/@types",
      "./src"
    ],
    "outDir": "dist",
    "strict": true,
    "target": "es2018"
  },

  "include": [
    "src/**/*",
    "tests/**/*"
  ]
}

但是当我故意向

twitter.d.ts
添加不正确的类型信息并运行
tsc --project tsconfig.json
时,它不会报告任何错误并写入
dist/

javascript node.js typescript
2个回答
0
投票

我需要启用编译器选项来检查js文件(即使允许使用js,打字稿默认情况下也不会这样做)

https://www.typescriptlang.org/tsconfig#checkJs

{
  "extends": "@tsconfig/node10/tsconfig.json",

  "compilerOptions": {
    "allowJs": true,
    "allowSyntheticDefaultImports": true,
    "alwaysStrict": true,
    "checkJs": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node",
    "noEmit": true,
    "noFallthroughCasesInSwitch": true
  },

  "include": ["src/**/*", "tests/**/*"]
}

0
投票

以下是我设法收集的有关“测试 TypeScript 声明文件”主题的一些信息。在我的特定情况下,我维护一个普通的 javascript 包,该包发布到 npm 并附带一个类型声明文件。我需要构建一个测试,确保类型声明在发布新的包版本之前确实有效。如何做到这一点? 这是我发现的:

考虑构建有效和无效类型使用的测试,例如
    tests/types.ts
  1. 。在负行前加上
    // @ts-expect-error
    。有关详细信息,请参阅
    typescriptlang.org
    totaltypescript.com 将您的
  2. index.d.ts
  3. 包含在
    .tsconfig
    中,方法是将其添加到
    files
    列表或include 列表中。使用标志 --listFiles 调用
    tsc
    以确保包含类型声明。即使 package.json 指定了 "types": "index.d.js",默认情况下也不包含类型声明文件。
    痛苦的方式:手动设置依赖于主包的虚拟包。主包发布后,升级虚拟包并尝试使用
  4. tsc
  5. 编译test.ts文件。如果附带的声明似乎不活跃,请返回主包,尝试修复并发布补丁。愚蠢,但如果其他一切都失败了,就能完成工作。
    
    
  6. 恐怕这些发现并不能形成明确的答案,但希望能帮助大家进一步针对您的具体情况找到合理的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.