typescript - 用导致错误的 Import 语句替换 Require 语句

标签 typescript import require

我正在尝试使用 Ajv (我正在使用 typescript )。

import { Ajv } from "ajv";

let ajv = new Ajv({allErrors: true});

只是想知道为什么会出现这个错误:

[ts] 'Ajv' only refers to a type, but is being used as a value here.

我像文档一样使用它:

var Ajv = require('ajv');
var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true}
var validate = ajv.compile(schema);
var valid = validate(data);
if (!valid) console.log(validate.errors);

但是我使用 import 而不是 require 所以我没有设置变量,所以我猜这是导致错误的原因。当使用 import 而不是 require 时,我该如何定义使用变量?

所有代码:

import { Injectable } from "@angular/core";
import { Http, Headers, Response } from "@angular/http";
import { Configuration } from "../shared/configuration.model";
import { Observable } from "rxjs/Rx";
import { Ajv } from "ajv";

@Injectable()
export class ValidateJSONSchemaService {

    constructor(private http: Http) { }

    public valJson(json, schemaFile: string) {
        return new Promise((resolve, reject) => {
            this.http.get(schemaFile)
                .toPromise()
                .then(fileContents => fileContents.json())
                .then((schema) => {
                    let ajv = new Ajv({allErrors: true});
                    ajv.validate(schema, json) ? 
                    resolve() :
                    reject(new Error("JSON does not conform to schema: " + ajv.errorsText()));
                }, err => reject(
                    new Error("Unable to get schema file contents:" + err))
                );
        });
    };
}

最佳答案

正如@elclanrs 所说,使用import * as Ajv from 'ajv'

不是想占功劳,但已经一年了,我几乎错过了答案,因为没有任何标记为答案。

关于typescript - 用导致错误的 Import 语句替换 Require 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795341/

相关文章:

reactjs - 使用外部插件 react 应用程序

ruby-on-rails - Rails CSV 导入文件的标题不在模型中

android - Gradle:错误:包不存在

python - 从 Python 中的子文件夹导入

javascript - 如何在嵌套模块中调用模块? javascript

arrays - 如果条件匹配, typescript 数组删除项目

angular - ngrx:规范化结构与可观察实体

javascript - 在 Windows、Mac 和 Linux 上分发 Electron 应用程序

javascript - 使用reflux时如何在javascript控制台中访问lodash

javascript - WebPack:需要将 javascript 文件置于全局范围内