#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.