导入任何依赖项时无法使用其他文件中的接口

Posted

技术标签:

【中文标题】导入任何依赖项时无法使用其他文件中的接口【英文标题】:Can't use interfaces from another file when they import any dependencies 【发布时间】:2019-05-07 08:40:22 【问题描述】:

接口导入有问题。当我在单独的文件中有非导入依赖项的接口时,例如:

/src/app/something/something.interface.ts

interface ISomething 
    a: String[];

我可以在同一目录中的另一个文件中使用它而无需导入它,例如:

/src/app/someting/something.tsx

class Something extends React.Component<ISomething, any> 


但是当我有这样的界面时:

import Page from '../components/page';

interface ISomething 
    a: String[];
    b: Page;

我从编译过程中得到一个错误: [2] ERROR in src/app/something/something.tsx(9,40): error TS2304: Cannot find name 'ISomething'.

我尝试使用export interface ISomething ... 并将它们导入something.tsx 但这会出错

[2] ERROR in src/app/application/education/react/renderer/renderer.tsx(8,9): error TS2305: Module '"/Users/xxx/Projects/react/src/app/something/something.interface"' has no exported member 'ISomething'.

当我将ISomething 接口放入something.tsx 文件时,它可以工作,但我想在单独的文件中保持干净。

你知道为什么吗?

编辑: tsconfig.json


  "compileOnSave": false,
  "compilerOptions": 
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  

tsconfig.app.json


  "extends": "../tsconfig.json",
  "compilerOptions": 
    "outDir": "../dist/out-tsc/app",
    "module": "es2015",
    "types": [
      "node"
    ]
  ,
  "exclude": [
    "src/test.ts",
    "**/*.spec.ts"
  ],
    "angularCompilerOptions": 
        "preserveWhitespaces": true
    

【问题讨论】:

***.com/questions/42233987/… 可能重复。 我不需要全局访问,只为特定文件导入。 道歉 - 说它是重复的太仓促了。问题不同,但根本问题(脚本和模块之间的差异)是相同的。 【参考方案1】:

这是由于 Typescript 中的一些奇怪的默认行为(主要用于遗留目的)。默认情况下,如果您的文件中没有导入/导出语句,并且它包含在您的 tsconfig.json 中(默认情况下,直接包含 tsconfig 中的所有内容),Typescript 会将其视为 脚本,而不是 模块,并使其标识符在全局范围内可用。

您可以通过更改 tsconfig.json 中 compilerOptions 中的 module 的值来禁用此行为。您想要哪个值取决于此代码的去向,但例如使用 es6 应该会给您所需的行为。

【讨论】:

我尝试将编译器选项更改为“es6”,但在编译过程中没有发现任何差异。我遇到了同样的错误。 您可以编辑您的问题以包含您的 tsconfig.json 吗?这将有助于找出问题所在。 我编辑我的问题并粘贴 tsconfig.jsontsconfig.app.json

以上是关于导入任何依赖项时无法使用其他文件中的接口的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ 无法识别来自 gradle 项目的某些导入

无法导入 Kotlin 多平台通用的依赖项

无法停止导入数据

使用依赖 pom/iml 文件手动添加 aar

IntelliJ - 添加依赖jar后,如何使用Jar中的方法

小程序 已被代码依赖分析忽略,无法被其他模块引用。你可根据控制台中的代码依赖分析告警信息修改代码,或关闭过滤无依赖文件功能