2017-09-18 12 views
0

私はhasManyのためのインターフェイスを定義しています活字体/ループバックの関連モデル

interface IHasMany { 
     /** 
     * Create a target model instance 
     * @param {Object} targetModelData The target model data 
     * @param {Function} callback The callback function 
     */ 
     // HasMany.prototype.create = function(targetModelData, options, cb) 
     create<T = any>(targetModelData: any, callback?: (err: Error, instance: T) => void): Promise<T> | void; 

(snip ... other functions findById, exists, updateById, destroyById omitted for bevity) 

役割モデル

"relations": { 
    "principals": { 
     "type": "hasMany", 
     "model": "RoleMapping", 
     "foreignKey": "roleId" 
    } 
} 

Typescriptでは、この関数はfとして使用されます(ループバックモジュールで定義されています)。 ollows:

await createdRole.principals.create({ 
    principalType: loopback.RoleMapping.USER, 
    principalId: createdUser.id 
}); 

(注:loopback.RoleMapping.USER私はDTに提出されます、今後のPRで一定である)

だから今、私はロールモデルに、このインターフェイスを接続する必要があり、ロールマッピングモデルを参照してください。

class Role extends PersistedModel { 
     static OWNER: string; 
     static RELATED: string; 
     static AUTHENTICATED: string; 
     static UNAUTHENTICATED: string; 
     static EVERYONE: string; 

     /** HasMany RoleMappings */ 
     static async principals = ???? 

次の手順についてのガイダンスはありますか?私は(例えばIHaveManyRoleMappingsなど)特定のRoleMappingすることIHasManyを拡張する必要があるように思える - this postを使用して、おそらく、その後、校長のようなものもあります

static async principals = class RoleMappings implements IHasManyRoleMappings {}; 

答えて

0

OK、誰がこの問題に渡って来て、ここで重要です:インターフェイスで

、それこの<T>との汎用インタフェースます

interface HasMany<T> { 
     /** 
     * Find a related item by foreign key 
     * @param {*} id The foreign key 
     * @param {Object} [options] Options 
     * @param {instanceCallback} callback 
     */ 
     // HasMany.prototype.findById = function(fkId, options, cb) 
     findById<T = any>(id: any, options?: any, callback?: (err: Error, instance: T) => void): Promise<T> | void; 
(snip ... other functions findById, exists, updateById, destroyById omitted for bevity) 

次に、以下のように、あなたは、単にあなたのインタフェース/クラスでこれを含める:

class Role extends PersistedModel { 
     static OWNER: string; 
     static RELATED: string; 
     static AUTHENTICATED: string; 
     static UNAUTHENTICATED: string; 
     static EVERYONE: string; 

     /** HasMany RoleMappings */ 
     // createdRole.principals.create({principalType: loopback.RoleMapping.USER, principalId: createdUser.id}); 
     principals: HasMany<RoleMapping>; 

今では、次のように使いやすいです:

await createdRole.principals.create({ 
    principalType: loopback.RoleMapping.USER, 
    principalId: createdUser.id 
})