我正在尝试使用validate.js库,该库包含其自己的TypeScript声明文件。
不幸的是,这不是很好的库类型,而DefinitelyTyped中有一个更好的库。我安装了@types/validate.js
NPM软件包,但是TypeScript没有使用它,而是使用了直接与该库捆绑在一起的声明。
有什么方法可以使编译器使用更好的声明?
您不能validate.js
单独使用DefinitelyTyped的声明,因为其中没有单个顶级export
-它们只是在ValidateJS
名称空间内声明一些接口。
而且,您validate.js
至少不能将node(module=commonjs
)用作捆绑声明,因为它们使用默认的export而不是export =
。
因此,您必须提供自己的声明才能validate.js
正确导入:
创建文件validate.d.ts:
declare var validate: (attributes: any, constraints: any, options?: any) => any; export = validate;
并告诉打字稿使用它,而不是node_modules
使用路径中的一个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' ] }