打字稿并没有抱怨缺少进口

时间:2018-01-17 17:06:35

标签: typescript

foo.ts的内容:

let a: Person = new Person();

bar.ts的内容:

class Person {}

tsconfig.json文件包含由tsc --init创建的默认值集。

我使用的是打字稿版本2.6.2。

上面的代码只编译没有关于Person未定义的错误。如果我在foo.ts中将Person重命名为Persons,则会发出错误cannot find name 'Persons'。所以它好像是以某种方式自动导入这个文件。

另请注意,我没有在bar.ts中导出Person类。如果我确实添加了一个导出语句,那么一切都应该如此 - 我收到一个错误cannot find name 'Person'

有谁知道这里发生了什么?这是用户错误吗?

编辑:

也许这在浏览器中是有意义的,但对我来说这种行为在node.js应用程序中没有任何意义。是否有禁止此行为的Typescript标志?

2 个答案:

答案 0 :(得分:1)

你的bar.ts不是一个模块,因为它没有任何导入或任何导出。因此它定义了一个全局Person类,它不需要导入,因为它是全局的。导出它,TypeScript会抱怨缺少导入。

答案 1 :(得分:0)

编译器标志align = "center"将确保所有.ts文件都是模块。通过在dataURItoBlob(dataURI) { var byteString = atob(dataURI.split(',')[1]); var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0] var ab = new ArrayBuffer(byteString.length); var ia = new Uint8Array(ab); for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } var blob = new Blob([ab], {type: mimeString}); return blob; } --isolatedModules添加foo.tsbar.ts模块后,import类将不再是全局的。

然而,这并未解决以下类似问题: https://github.com/Microsoft/TypeScript/issues/18232#issuecomment-359200157