我試圖使用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'路徑'工程!多謝 :) –