Можно ли проверять тип только импортированных библиотек (Typescript, VSCode)? - PullRequest
2 голосов
/ 21 января 2020

Basi c вопрос: Можно ли проверить только import s?

Я делаю хочу знать

  • TS: property 'id' does not exist on type 'Stripe.customer' (например)
  • , но не самостоятельно объекты, такие как property 'prop1' does not exist on type '{}'

Фон

  • Я работаю над проектом Javascript и хотел бы использовать Typescript для добавления intellisense с импортированными библиотеками, в то же время записывая в JS, поэтому я изменил свой файл .js на .ts во время разработки. († см. Внизу)

  • В проекте Javascript множество объектов инициализируются как let x = {}, а затем свойства добавляются как x.prop1 = value1.

  • TSLint тогда предупреждает меня, property 'prop1' does not exist on type 'x'.

Я хотел бы получить это предупреждение только об импорте.

  • Например, если я import * as stripe from 'stripe', то полезно получить предупреждение property 'id' doest not exist on type 'customer'.

  • Следуя этой теме, свойство не существует для типа '{}' , я могу добиться этого вручную для каждого объекта путем преобразования x.prop1 в x['prop1'].

  • Я также экспериментировал со встроенными комментариями, чтобы отключить различные правила TSLint, но предупреждения исходят от возможностей языка Typescript в VSCode, а не TSLint.

Однако, чтобы переформулировать вопрос более точно: Есть ли директива или опция конфигурации, которая позволила бы мне добавлять свойства к объектам, определенным в моем own код без предупреждения, в то же время предупреждение / проверка типов импортированных библиотек?

† Если есть альтернативный, менее изворотливый способ получить intellisense для импортированных библиотек в Javascript, я весь в ушах!

1 Ответ

0 голосов
/ 24 января 2020

В конечном итоге я смог добиться этого,

  1. , сохранив расширение моего файла .js вместо .ts (которое я использовал только потому, что считал необходимым включить проверка типа)

  2. добавление файла tsconfig.json в мой проект со следующими настройками для включения проверки типа JS:

{
  "compilerOptions": {
    "module": "commonjs",
    "allowJs": true,
    "checkJs": true,
    "strict": false,
    "noImplicitReturns": true,
    "noImplicitAny": false,
    "noUnusedLocals": false,
    "strictPropertyInitialization": false,
    "outDir": "lib",
  },
  "compileOnSave": false,
}

В результате я мог написать x.myProp без предупреждения, но importedLibrary.propThatDoesNotExist выдаст ошибку Typescript.

И поскольку compileOnSave равен false, компилятор фактически не предпринимал никаких действий, он просто выдает предупреждения - эффективно позволяя некоторым добавленным функциям TS в файле JS , что весьма полезно.

Я считаю, что это работает , потому что это файл Javascript, и поэтому компилятор TS ожидает кодирование в стиле JS, но я не уверен на 100%.

Наконец, полезная ссылка на опции компилятора выше: https://www.typescriptlang.org/docs/handbook/compiler-options.html

...