我试图使用validate.js库,它包含它自己的TypeScript声明文件。忽略捆绑的.d.ts并使用外部声明
不幸的是,它不是一个很好的打字库,DefinitelyTyped中有a much better one。我安装了@types/validate.js
NPM软件包,但TypeScript没有使用它,而是使用与库直接捆绑的声明。
有什么办法可以让编译器使用我可用的更好的声明吗?
我试图使用validate.js库,它包含它自己的TypeScript声明文件。忽略捆绑的.d.ts并使用外部声明
不幸的是,它不是一个很好的打字库,DefinitelyTyped中有a much better one。我安装了@types/validate.js
NPM软件包,但TypeScript没有使用它,而是使用与库直接捆绑的声明。
有什么办法可以让编译器使用我可用的更好的声明吗?
您不能使用来自DefinitelyTyped的validate.js
的声明,因为其中没有单个顶级export
- 它们只是在ValidateJS
名称空间内声明了一些接口。
而且至少对于节点(module=commonjs
),您不能使用validate.js
的捆绑声明,因为它们使用默认导出而不是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' ] }
啊!是的,现在你提到它的DefinitelyTyped [测试validate.js](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/validate.js/validate.js-tests.ts#L1-L3)使用全局名称空间导入。有趣有趣的乐趣。但tsconfig'路径'工程!多谢 :) –