在导入的对象上运行不存在的方法时,为什么TypeScript没有给我编译时错误?

时间:2019-04-26 13:13:23

标签: typescript

Here is the repo for this question,如果需要,您可以克隆该存储库,使用TypeScript进行编译,然后在节点中运行它,以查看是否存在运行时错误,但没有编译时错误。

追赶:为什么当我尝试运行从另一个模块file2导入的对象的方法时,鉴于该对象没有方法,为什么我在file1中没有得到TypeScript的编译时错误?

这是代码,基本上是:

要设置项目:

mkdir test
cd test
npm init --yes
yarn add typescript
touch tsconfig.json
touch index.ts
touch jsModule.js

这里是tsconfig.json

{
  "compilerOptions": {
    "allowJs": false,
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,
    "module": "es2015",
    "moduleResolution": "node",
    "noImplicitAny": false,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "sourceMap": true,
    "target": "es2015",
    "skipLibCheck": true,
    "strict": true,
    "resolveJsonModule": true
  },
  "exclude": ["node_modules"]

}

这是我创建的两个文件:

// jsModule.js

export const MyModuleObject = {};

// index.ts
import { MyModuleObject } from './jsModule';
console.log(MyModuleObject.method());

问题:打字稿没有说我打给MyModuleObject.method()

1 个答案:

答案 0 :(得分:2)

"noImplicitAny": false中的

tsconfig.json会导致您的问题。

它只是表示“允许隐式任何”。由于TS对jsModule.js导出的内容一无所知,因此您可以有效地允许TS将any分配为该模块的类型。 MyModuleObject.method()变成any.any(),很好。

设置"noImplicitAny": true,然后TS会抱怨。