如何使用TypeScript检查使用矩的.js文件?

如何使用TypeScript检查使用矩的.js文件?,typescript,momentjs,Typescript,Momentjs,我有一个使用矩的小.js文件,打算直接在浏览器中运行,我想用TypeScript编译器进行类型检查: document.querySelector("body").textContent = moment().toString(); 如果我尝试使用tsc对其进行打字检查,编译器会抱怨它找不到moment的声明,即使我安装了momentnpm包: $ npm install typescript moment $ node_modules/.bin/tsc --allowJs --checkJs

我有一个使用矩的小.js文件,打算直接在浏览器中运行,我想用TypeScript编译器进行类型检查:

document.querySelector("body").textContent = moment().toString();
如果我尝试使用
tsc
对其进行打字检查,编译器会抱怨它找不到
moment
的声明,即使我安装了
moment
npm包:

$ npm install typescript moment
$ node_modules/.bin/tsc --allowJs --checkJs --noEmit index.js
index.js:1:46 - error TS2304: Cannot find name 'moment'.

1 document.querySelector("body").textContent = moment().toString();
                                               ~~~~~~
Found 1 error.
我如何告诉TypeScript编译器自动检测
全局对象或在JS文件中显式导入它?

对于矩2.24.0
一旦被接受,无需采取特殊措施。

您如何导入
时刻
软件包

使用require/CommonJS语法,我没有发现任何错误:

// index.js

const moment = require("moment")

document.querySelector("body").textContent = moment().toString();
使用
tsc--allowJs--checkJs--noEmit src/index.js
进行测试时,不会出现错误

现在,如果您想使用ES6语法,您可以这样做:

// index.js

import moment from 'moment'

document.querySelector("body").textContent = moment().toString();

并在tsconfig.json文件的
编译器选项下添加
“esModuleInterop”:true

如果它在全球可用,您可以使用:

声明变量时刻:任何

这会告诉typescript在别处声明了时刻,它不应该抛出错误


如果您想要更多强类型的代码,您也可以指定类型而不是
any
,我使用的是.js文件中的矩,该文件旨在直接在浏览器中运行,因此不需要导入。您是否使用包或网页包之类的捆绑包?因为它们会将
moment
捆绑到您的web应用程序中,您甚至可以将
moment
用作库,也可以直接在浏览器中运行它。此处没有网页包或包裹。对于我们的生产构建,有连接和缩小,但没有捆绑(导入或需求)。开发构建是直接运行的,没有任何转换。这将允许您检查类似于moment()的表达式,而不是类似于/**type-moment的类型注释。moment*/这非常有效!不过,它可以使用一个小的调整:不必在2.24垫片中引用moment.d.ts的完整路径,您可以在第一行中简单地。。。从“时刻”导入时刻
// index.js

const moment = require("moment")

document.querySelector("body").textContent = moment().toString();
// index.js

import moment from 'moment'

document.querySelector("body").textContent = moment().toString();