忽略捆绑的.d.ts并使用外部声明

时间:2017-01-09 23:23:42

标签: typescript

我试图使用validate.js库,其中包含自己的TypeScript声明文件。

不幸的是,这不是一个非常好的图书馆打字,并且在DefinitelyTyped中有a much better one。我安装了@types/validate.js NPM包,但是TypeScript没有使用它,而是使用直接与库捆绑的声明。

有没有办法让编译器使用我可用的更好的声明?

1 个答案:

答案 0 :(得分:4)

您不能单独使用DefinitelyTyped的validate.js声明,因为其中没有单个顶级export - 它们只是在ValidateJS命名空间内声明了一些接口。

并且您不能对validate.js使用捆绑声明,至少对于节点(module=commonjs),因为它们使用默认导出而不是export =

因此,您必须提供自己的声明才能正确导入validate.js

创建文件 validate.d.ts

declare var validate: (attributes: any, constraints: any, options?: any) => any;
export = validate;

使用node_modules中的paths告诉打字稿使用它而不是tsconfig.json中的打字稿:

  "compilerOptions": {
    "baseUrl": ".", // This must be specified if "paths" is.
    "paths": {
      "validate.js":  ["./validate.d.ts"]
    }
  }

(请注意,如果您有baseUrl,则必须paths,因此如果您未将其设置为其他内容,请设置"baseUrl" : "."

然后您可以像这样使用ValidateJS.Constraints,其他人一旦npm install @types/validate.js即可立即使用):

import validate = require('validate.js');


let constraints: ValidateJS.Constraints = {
    'foo': {presence: true}
};

let e = validate({}, constraints);

console.dir(e);

输出:

{ foo: [ 'Foo can\'t be blank' ] }