我试图使用validate.js库,其中包含自己的TypeScript声明文件。
不幸的是,这不是一个非常好的图书馆打字,并且在DefinitelyTyped中有a much better one。我安装了@types/validate.js
NPM包,但是TypeScript没有使用它,而是使用直接与库捆绑的声明。
有没有办法让编译器使用我可用的更好的声明?
答案 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' ] }