javascript - 为什么 TypeScript 在库中看不到枚举?

标签 javascript typescript validation

这是 html-validator 的 TypeScript 类型:

declare namespace HtmlValidator {

    // ...

    enum ValidationResultsOutputFormats {
        json = 'json',
        html = 'html',
        xhtml = 'xhtml',
        xml = 'xml',
        gnu = 'gnu',
        text = 'text'
    }

    interface OptionsForHtmlFileAsValidationTargetAndObjectAsResult extends OptionsForHtmlFileAsValidationTarget {
      format?: 'json';
    }

    interface OptionsForHtmlFileAsValidationTargetAndTextAsResults extends OptionsForHtmlFileAsValidationTarget {
      format: 'html' | 'xhtml' | 'xml' | 'gnu' | 'text';
    }

    interface OptionsForExternalUrlAsValidationTargetAndObjectAsResult extends OptionsForExternalUrlAsValidationTarget {
      format?: 'json';
    }

    interface OptionsForExternalUrlAsValidationTargetAndTextAsResults extends OptionsForHtmlFileAsValidationTarget {
      format: 'html' | 'xhtml' | 'xml' | 'gnu' | 'text';
    }
}

( 🔗 Full Version )

我想使用 ValidationResultsOutputFormats 而不是字符串文字。 IDE 和 TypeScript 都不会编译以下代码的警报/错误:

import validateHtml, { ValidationResultsOutputFormats } from 'html-validator';


export default abstract class HtmlValidator {

  public static validateHtml(compiledHtmlFile: Vinyl): void {

    // ...

    validateHtml({
      data: compiledHtmlFile.contents.toString(),
      format: ValidationResultsOutputFormats.json
    }).then((validationResults: validateHtml.ParsedJsonAsValidationResults) => 
    {
        // ...
    });
  }
}

但是,由于 ValidationResultsOutputFormats 未定义,因此会发生 JavaScript 错误。

Cannot read property 'json' of undefined

(引用格式:ValidationResultsOutputFormats.json)。

这是某种错误还是 TypeScript 错误?

P。 S. 请不要使用字符串文字解决方案 - 这是硬编码。

更新:我的 tsconfig.json

{
  "compilerOptions": {

    "target": "es6",
    "strict": true,

    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,

    "lib": [
      "es2018"
    ],

    "baseUrl": "./",
    "paths": {}
  }
}

最佳答案

一旦你安装了包@types/html-validator,这样:

npm install @types/html-validator --dev

无需从库本身导入类型。

命名空间将在全局范围内可供您使用。

尝试:

  • 重命名您的类,以便 HtmlValidator 不会出现名称冲突。
  • 在导入中引用 HtmlValidator
import * as HtmlValidator from 'html-validator';


export default abstract class Validator {

  public static validateHtml(compiledHtmlFile: Vinyl): void {

    // ...

    validateHtml({
      data: compiledHtmlFile.contents.toString(),
      format: HtmlValidator.ValidationResultsOutputFormats.json
    }).then((validationResults: HtmlValidator.ParsedJsonAsValidationResults) => 
    {
        // ...
    });
  }
}

关于javascript - 为什么 TypeScript 在库中看不到枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57505627/

相关文章:

javascript - javascript中的最大堆?

javascript - 当文本框有效时隐藏弹出窗口

javascript - 重建 Angular JavaScript 数组对象

javascript - Typescript 生成的 JavaScript 有一个不是函数的函数

typescript - 在 typescript 库包中找不到静态导出

arrays - 强制 TypeScript 数组包含给定值的元素

ruby-on-rails - Rails 3.0中的默认验证错误消息在哪里?

file - YII2 如何为文件类型添加自定义验证规则

javascript - 如何在 while 循环中处理交替的异步函数?

javascript - Vue.js 中 Express-Handlebars 部分的等价物是什么?