typescript 的全局模块定义

wqlqzqxt  于 2023-01-31  发布在  TypeScript
关注(0)|答案(2)|浏览(155)

我正在Webstorm中使用以下文件结构处理一个项目

| src
    | ...
    | many files
| types
    | SomeInterface
        | index.d.ts
    | AnotherInterface
        | index.d.ts
    | index.d.ts

我想使SomeInterface全球可用(使用接口,无需导入)。
我的主要index.d.ts如下所示:

import { SomeInterface } from './SomeInterface'
import { AnotherInterface} from './AnotherInterface'

declare global {
  interface MainInterface extends SomeInterface {
    someAttribute?: number[]
    names: SomeInterface[]
    contactData: AnotherInterface[]
  }
}

每当我尝试在src/some/path/to/file.ts中实现类型定义时:

function someFunctionName(parsedData: MainInterface):void{...}

我收到以下消息:ESLint: 'MainInterface' is not defined.(no-undef)
这是我当前的tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "allowJs": true,
    "checkJs": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "noImplicitAny": false,
    "baseUrl": "./",
    "paths": {
      "*": ["src/*"]
    }
  },
  "include": ["src", "types/index.d.ts"],
  "exclude": ["node_modules"]
}

我错过了什么吗?我知道,使全球可用的东西是不建议的,但我被要求以这种方式具体。

eeq64g8w

eeq64g8w1#

typescript-eslint常见问题解答提供了以下指导:
我们强烈建议您不要在TypeScript项目上使用no-undef lint规则。它提供的检查已经由TypeScript提供,无需配置- TypeScript只是在这方面做得更好。
但是no-undef对JavaScript很有用,所以如果你有混合使用,最好只对使用TypeScript的文件禁用它,例如Vue + TypeScript:

"overrides": [
    {
        "files": ["*.ts", "*.vue"],
        "rules": {
            "no-undef": "off"
        }
    }
]

当然,不要使用JavaScript编写Vue文件,因为no-undef是禁用的。

xkrw2x1b

xkrw2x1b2#

如果您在代码中定义了自定义全局变量,则需要将它们告知ESLint:https://eslint.org/docs/user-guide/configuring#specifying-globals
尽管如此,我还是会考虑关闭no-undef规则,因为TypeScript本身已经涵盖了这一检查。

相关问题