【问题标题】:IDE doesn't find the declared global typesIDE 找不到声明的全局类型
【发布时间】:2019-01-04 15:59:42
【问题描述】:

我有一个全局类型文件,我在其中定义我的类型、变量等...

现在项目结构是这样的:

trunk
   typings
     index.d.ts
   src
     Example.ts
     Example.d.ts
   tsconfig.json

index.d.ts 我想说

declare type userInfo = {
    username: string,
    password: string,
}

但是在Example.d.ts 中,当我直接使用userInfo 时,IDE 说它找不到名称,而 tsc 编译器没有显示错误。

declare class Something {
   ...
   getUserInfo: () => userInfo; // <--- this is highlighted red
}

有趣的是,当我在Example.ts 中使用userInfo 时,没有突出显示的错误。

另一个有趣的事情是当我go to the declaration 它跳到index.d.ts 中的正确行

我不导入这两个文件中的类型,因为它们是global 类型。

我的tsconfig 文件如下:

{
    "compilerOptions": {
        ...
        "typeRoots": ["./typings"],
        ...
    },
    ...
}

可能是什么问题?

【问题讨论】:

  • 我可以在 Visual Studio Code 中重现这一点。看起来当 Example.ts 存在时,Example.d.ts 不再被视为项目的一部分; tsc 甚至没有阅读它(这解释了那里没有错误),当我在 Visual Studio Code 中打开它时,它看不到其他文件。我不认为用户应该同时拥有 Example.ts 和 Example.d.ts。为什么两个都有?
  • 您可以将 /// 添加到您的 Example.d.ts 文件中。我建议您向github.com/Microsoft/TypeScript/issues 提交错误。

标签: typescript types import tsconfig


【解决方案1】:

你不应该声明类型。当你想指出全局变量范围内有一些 javascript 类时,Declare 很有用(因此,Typescript 无法看到它)。例如:

declare class UserInfo {...} // typings.d.ts

现在你应该改用普通的type

type UserInfo = {...} // Example.ts

更好的是,我建议你在你的情况下使用接口,因为 UserInfo 类型似乎很简单:

// Example.ts
interface UserInfo {
  username: string,
  password: string,
} 

有什么不懂的可以问我

【讨论】:

  • @jackop 你也删除了example.d.ts 吗?你是否导入了UserInfo 接口? TypeScript 代码不需要 d.ts 文件,我声明和导入的任何类型的类型信息在 VS Code 中始终可供我使用。这是正确的答案。
  • @jackjop 如果接口位于.ts 文件中,您需要导入接口。当它位于d.ts 文件中时,您不需要导入它。 MediaStream 住在node_modules/typescript/lib.dom.d.ts,这就是为什么您无需导入即可使用它的原因。出于某种原因,我总是将我的接口放在.ts 文件中,也许是因为我喜欢明确的东西,而不喜欢全局的东西。据我所知,许多开发人员使用相同的方法。恕我直言,您应该这样做,除非您的应用程序非常小,并且您确定不会有两个同名的接口。
  • 使用全局名称是一种不好的做法。想一想:也许你有错误,因为你试图做的不是主流/最佳实践,因此只有你有这个问题。无论如何,我根据我的经验(超过 12 年)给了你解决方案和建议。你拒绝了它。所以,看来我帮不了你了。
  • 这没有回答问题。 TS 支持 global.d.ts 是有原因的
猜你喜欢
  • 2019-04-02
  • 1970-01-01
  • 2012-04-30
  • 2020-07-25
  • 2015-05-17
  • 1970-01-01
  • 2020-05-15
  • 2021-11-22
  • 2017-03-25
相关资源
最近更新 更多