我将现有的代码库从js/react/jsx设置转换为TypeScript。当然,我希望逐个文件地完成它,并且有一个关于使TS编译器与现有的js代码库一起工作的方法的问题。在TypeScript中增加导入模块的类型
我转换文件index.js
但要离开foo.js
在JavaScript现在:
// index.ts
import { fooFunction } from 'foo';
foo({ val: 1 });
// foo.js
export const fooFunction = ({ val, optionalProp }) => {
//...
}
是打字稿自动推断参数foo
并抱怨在这个例子中的问题Property 'optionalProp' is missing in type { val:string, optionalProp:any }
需要“存根”的类型fooFunction
寄给我看一个d我找到了一些方法,我可能能够做到这一点:
1)使用需要,而不是进口
// index.ts
var fooFunction: any = require('foo').fooFunction;
2)合并申报
?
3)添加包含自定义声明的d.ts文件foo
- 尚未尝试但看起来不方便
理想的情况下,我没有做(1),因为我想用进口语法来保持和我没有做(3),因为这将需要我补充申报文件只将它们删除稍后当我准备转换foo
时。
(2)听起来很棒,但我找不出一个可行的解决方案。
// index.ts
declare module 'foo' {
function fooFunction(options: any): any
}
不工作,并抛出Cannot redeclare block-scoped variable 'fooFunction'
我该怎么办呢?是否有文档中有我正在尝试做的示例和/或关于声明合并以及如何使用namespace/interface/value的更多解释? 是否有更好的方法逐步过渡到TypeScript?
对于那些可能有同样问题的人,我选择使用声明文件。对于这个例子,文件'foo.d.ts'。所以,现在我有'foo.d.ts'和'foo.js'。转换'foo时。js'到TS后,声明文件可能会变得没有必要,所以打算将其删除 –