参考路径未使用导入捕获接口-IntelliJ

时间:2019-01-31 00:19:13

标签: typescript intellij-idea types import

文件结构

frontend
  | static
    | ts
      | react
        |components
          AnotherFile.d.ts
          Index.d.ts

上下文

当我按如下方式实现 AnotherFile.d.ts Index.d.ts 时,IntelliJ似乎对这两个文件没有产生任何错误:

Index.d.ts

interface myFuncType {
  (n: number): void;
}

AnotherFile.d.ts

/// <reference path='./Index.d.ts'/>
interface AnotherType {
  f: myFuncType
}

现在,如果 Index.d.ts 导入并使用如下类,则IntelliJ在 AnotherFile.d.ts 中用红色下划线标记“ myFuncType”,并显示错误, TS2304: Cannot find name 'myFuncType'

Index.d.ts

import {MyClass} from "static/ts/MyClass";

interface myFuncType {
  (n: MyClass) : void;
}

AnotherFile.d.ts

/// <reference path='./Index.d.ts'/>
interface AnotherType {
  f: myFuncType;
}

注释

  1. 如果在第二种情况下将{em> AnotherFile.d.ts 替换为...<reference path.../>的{​​{1}}行,错误消失了,但是我想知道是否存在使用import {myFuncType} from "static/ts/react/components/Index";时进行这项工作的方法。
  2. frontEnd 标记为“资源根”似乎是允许在...<reference path.../>行中使用相对路径(例如,用import ...而不是import {myFuncType} from "./Index"

问题

在没有在 AnotherFile.d.ts 中引入任何“ import”语句的情况下,如何使第二种情况起作用。

1 个答案:

答案 0 :(得分:1)

通过将import添加到您的Index.d.ts中,您将其设置为module。与namespaces不同,只能通过使用一种导入形式显式导入模块来使用模块,因此会产生编译器错误。

在定义界面(应该使用d.ts文件的方式)时,您需要确定所使用的应用程序类型。如果是模块化应用程序,则需要使用模块。对于应该从全局范围(例如,通过浏览器中的<script src=...>访问)的全局应用程序,请使用名称空间。将两者混合在同一代码中将无效。

有关更多信息,请参见https://www.typescriptlang.org/docs/handbook/declaration-files/library-structures.html