2017-11-10 10 views
0

私はループバック3でFireloopを使用しており、型チェック付きPersistedModelValidatableメソッドを使用して型保証付きフックとリモートメソッドを作成する方法を知りたいと考えています。私はPersistedModelがタイプチェックの使い方Loopback/Fireloop PersistedModel

this.model.count().then((n) => ...); 
のような呼び出しをしたいのですが

constructor(public model: any) { }

に...

constructor(public model: SomeType) { }

...からのコンストラクタの種類を変更したいのですが

などの確認可能な通話:

model.validatesLengthOf('code', { 
    min: 6, max: 12, message: { min: 'too short', max: 'too long'} 
}); 

以下のようなFireloopの例では、this.modelとしてanyを使用しています。 firestarter model samplesとFireloopのドキュメントもここでは役に立たなかった。

ModelConstructorというタイプがfireloopソースツリーでcore/index.d.tsの下に宣言されています。このインターフェイスは、PersistedModelValidatableのすべてのメソッドを実装していますが、npmjsでどこに公開されているので正しく表示されますか?それは既にFireloopサーバーSDKの一部ですか、それともnpm installにする必要がありますか?いい考えはありません。

import { Model } from '@mean-expert/model'; 

/** 
* @module Account 
* @description 
* Write a useful Account Model description. 
* Register hooks and remote methods within the 
* Model Decorator 
**/ 
@Model({ 
    hooks: { 
    beforeSave: { name: 'before save', type: 'operation' } 
    }, 
    remotes: { 
    myRemote: { 
     returns: { arg: 'result', type: 'array' }, 
     http: { path: '/my-remote', verb: 'get' } 
    } 
    } 
}) 

class Account { 
    // LoopBack model instance is injected in constructor 
    constructor(public model: any) { } 

    // Example Operation Hook 
    beforeSave(ctx: any, next: Function): void { 
    console.log('Account: Before Save', ctx.instance);  
    next(); 
    } 
    // Example Remote Method 
    myRemote(next: Function): void { 
    this.model.find(next); 
    } 
} 

module.exports = Account; 

Finiallyは、私はまた、Loopback 3 Typescript definitionsを使用しようとしましたが、ここではすべてのように型チェックに失敗し、Promise<T> | voidを返すstaticとして宣言されているPersistedModel方法など多くの問題をヒットしました。後者の場合は、入力を強制的に入力して結果をPromise<T>に戻すことを意味するので、タイプ定義者が実際に使用したことがないようです。これはバグですか、何か不足していますか?そうでない場合には、実例を見つけることができません。

これはサーバー側のAPIの痛みです。クライアント側のFireloop用REST APIもドキュメント化されていません(Real-time APIの多くの例)が含まれているはずのREST APIはありません。 Typescriptですべての型をチェックすることができます。

答えて

0

妥当性検査メソッドに{ message: 'my error message' }のような引数がなく、exists()のようなメソッドがPromise<boolean>の代わりにPromise<any>のように返されていることがわかりました。

Loopback 3 Type definitionsの型定義はより完全でしたが、上記のように固定しない限り使用できませんでした。私が使用した最後に

..

# Used modified type defs from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/loopback/index.d.ts 

import { Validatable } from '../types/validatable'; 
# Fixed static methods and return types. 
import { PersistedModel } from '../types/loopback'; 

constructor(public MyModel: Validatable | PersistedModel) { 
    let Model = MyModel as Validatable; 
    Model.validatesLengthOf('code', { 
    min: 6, 
    max: 80, 
    message: { min: 'too short', max: 'too long' } }); 
    Model.validatesFormatOf('email', 
    { with: this.reEmail, 
     message: 'invalid email address', 
     allowNull: false }); 
    Model.validatesInclusionOf('role', { 
    in: RoleNames, 
    message: 'is not valid' 
    }); 
} 

以降の方法で...

let Model = this.MyModel as PersistedModel; 

// knows that isFound is boolean 
Model.exists(code).then(isFound => { ... }); 
関連する問題