Определение глобального модуля для typescript

#typescript #eslint #typescript-typings #typescript-eslint

#typescript #eslint #машинописный текст-типизации #typescript-eslint #typescript-типизации

Вопрос:

Я работаю над проектом в 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"]
}

  

Я что-то упускаю? Я знаю, что делать вещи глобально доступными не рекомендуется, однако меня попросили сделать это именно таким образом.

Комментарии:

1. Итак, этот вопрос касается использования ES Lint с TypeScript?

2. @AluanHaddad Сначала я не был уверен, была ли это проблема с определением типа или проблема с линтером. Основываясь на ответе Брэда, похоже, что это проблема ESLint / TsLint

Ответ №1:

В часто задаваемых вопросах по typescript-eslint содержатся рекомендации здесь:

Мы настоятельно рекомендуем вам не использовать правило отсутствия undef lint в проектах TypeScript. Проверки, которые он предоставляет, уже предусмотрены TypeScript без необходимости настройки — TypeScript просто делает это значительно лучше.

Но no-undef полезен для JavaScript, поэтому при смешанном использовании лучше отключить его только для файлов, использующих TypeScript, например, для Vue TypeScript:

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

Конечно, не записывайте файлы Vue с использованием JavaScript, поскольку no-undef он отключен.

Ответ №2:

Если вы определяете пользовательские глобальные переменные в своем коде, вам нужно сообщить ESLint о них:https://eslint.org/docs/user-guide/configuring#specifying-globals

Хотя я бы просто подумал об отключении no-undef правила, поскольку это проверка, которая уже предусмотрена самим TypeScript.