这是 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/