2017-05-13 9 views
2

Typescriptでライブラリ型宣言をインポートするとどうなりますか。コンパイラの問題がある場合、そのライブラリの定義をどのように拡張できますか?そうでなければ有効なjsコードですか?たとえば、validate.js型バインディングは実際の実装と比較して非常に不正確です。以下に示すようなもの....Typescriptでlibary型定義をオーバーライドまたは拡張する方法

import * as validate from 'validate.js'; 

declare namespace validate { 
    Promise: any; 
    async: any; 
} 

同様に、私はmodelSchemasプロパティにアクセスできませんが、私はする必要があります。

コンパイラをシャットダウンするために既存の型に定義を追加したいのですが。どうやってやるの?

答えて

1

srcのルートのcustom-typings.d.tsにさらに入力してください。

カスタムtypings.d.ts

import * as mongoose from "mongoose"; 

//augment validate.js 
declare module "validate.js" { 
    let Promise: any; 
    function async(param: any): any; 
} 

//augment mongoose 
declare module "mongoose" { 
    let modelSchemas: mongoose.Schema[] 
} 

私-module.ts

import validate = require("validate.js"); 
import mongoose = require("mongoose"); 
import * as Bluebird from "bluebird"; 

validate.Promise = Bluebird; 
mongoose.Promise = Bluebird; 

let schema = new mongoose.Schema({ 
    name: String 
}); 

mongoose.modelSchemas = [schema]; 

validate.async("foo"); 

Why import with ES5 syntax (require)? ES6モジュールとそのプロパティが一定です。

+1

これはvalidate.jsで動作していますが、「プロミスには割り当てられません。これは定数であるか、またはnlyプロパティを読み取ったためです」というエラーが出ます。また、どのようにマングースにプロパティを追加する.Mongoose?私は同様の試みをしましたが、構文が正しくできませんでした。 –

+0

編集された答えをご覧ください。いくつか余分なジュースがあります - マンゴーはブルーバードをPromiseライブラリとして使用します。 – Granga

+0

これでmongooseとvalidate.jsのエラーが解決しました。助けてくれてありがとう。 –

関連する問題