【问题标题】:Is it possible to type-check only imported libraries (Typescript, VSCode)?是否可以仅对导入的库(Typescript、VSCode)进行类型检查?
【发布时间】:2020-05-07 20:57:26
【问题描述】:

基本问题:是否可以只对imports 进行类型检查?

确实想知道

  • TS: property 'id' does not exist on type 'Stripe.customer'(例如)
  • 不是在我自己的对象上,比如property 'prop1' does not exist on type '{}'

背景

  • 我正在开发一个 Javascript 项目,我想使用 Typescript 为导入的库添加智能感知,否则使用 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' 会很有帮助。

  • 按照这个线程 property does not exists on type '{}' ,我可以通过将 x.prop1 转换为 x['prop1'] 来基于每个对象手动实现这一点。

  • 我还尝试过使用内联 cmets 来禁用各种 TSLint 规则,但警告来自 VSCode 中的 Typescript 语言功能,而不是 TSLint。

但是,为了更准确地重申这个问题: 是否有指令或配置选项允许我向我的 own 代码中定义的对象添加属性而不发出警告,同时仍然警告/类型检查导入的库?

† 如果有一种替代的、不那么笨拙的方法可以在 Javascript 中对导入的库进行智能感知,我会全力以赴!

【问题讨论】:

    标签: typescript visual-studio-code intellisense


    【解决方案1】:

    最终,我能够通过

    实现这一目标
    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 错误。

    而且因为compileOnSavefalse,编译器实际上并没有采取任何行动,它只是发出警告——实际上允许一些在 JS 文件中添加 TS 功能,这相当有用。

    我相信这是可行的,因为它是一个 Javascript 文件,因此 TS 编译器需要 JS 样式的编码,但我不能 100% 确定。

    最后,对上述编译器选项的有用参考:https://www.typescriptlang.org/docs/handbook/compiler-options.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-02
      • 2018-07-15
      • 2020-07-29
      • 1970-01-01
      • 2019-02-19
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多