【问题标题】:Can TypeScript verify that a .js file is consistent with its own .d.ts declarations?TypeScript 可以验证 .js 文件是否与其自己的 .d.ts 声明一致?
【发布时间】:2017-10-24 01:45:43
【问题描述】:

是否可以让 TypeScript 编译器检查 JavaScript 文件 foo.js 是否与其自己的声明文件 foo.d.ts 一致?

我们有一段 JavaScript 代码,出于各种原因,我们希望将其保留在 JavaScript 中。不过,如果可能的话,我们希望使用 TypeScript 来实现两个目标:1) 确认我们自己的 JavaScript 代码是类型安全的,以及 2) 向有兴趣使用 TypeScript 的客户提供声明。

对于给定的 JavaScript 文件 foo.js,我们可以创建相应的文件 foo.d.ts 以满足目标 #2(支持 TypeScript 客户)。但据我们所知,foo.d.ts 的存在不会导致对foo.js 的任何检查。也就是说,声明文件只对 foo.js 的外部使用者感兴趣,编译器不会验证 JavaScript 代码是否与其自己的 .d.ts 声明一致。

我们已经尝试在 foo.js 中使用 jsDoc 类型注释,TypeScript 编译器确实验证该文件中的代码与那些声明的类型一致。这似乎满足了目标 1(检查我们自己的代码)。

但是,jsDoc 注释不如 .d.ts 声明文件中的完整 TypeScript 语法强大(例如,jsDoc 对泛型的支持是初级的),这限制了我们可以使用它们的地方。此外,TypeScript 编译器似乎没有提供任何验证 jsDoc 注释是否与 .d.ts 声明一致。我们冒着这两种类型信息来源不一致的风险。

我们正在寻找有关在这样的 JavaScript 项目上下文中利用 TypeScript 类型检查的最佳方法的指导。

【问题讨论】:

  • 如果你有单元测试脚本,那么将它们转换为 Typescript 可能是值得的。这会让你对强类型界面充满信心。
  • @ChrisReynolds 好主意,谢谢。

标签: typescript


【解决方案1】:

是否可以让 TypeScript 编译器检查 JavaScript 文件 foo.js 是否与其自己的声明文件 foo.d.ts 一致

不是真的。 .js 文件几乎没有提供关于确切支持和不支持的内容。如果可能,我们就不需要 TypeScript。

更多

【讨论】:

  • 我不确定我是否理解这一点。 JavaScript 在类型方面是模棱两可的,但我可以在 foo.js 中编写 jsDoc cmets 来精确定义该文件中函数的联系。 TypeScript 编译器将验证代码是否符合这些合同。我可以将那些相同的 jsDoc cmets 提取到 foo.d.ts 中,以允许更大程度表达的不同形式提供相同的合同定义。将这些声明应用于文件本身似乎是一个有效的用例——实现与 jsDoc cmets 当前允许的相同级别的类型安全,而且更好。
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2015-11-22
  • 2020-11-22
  • 2020-12-24
  • 1970-01-01
  • 2021-02-18
相关资源
最近更新 更多