2016-08-20 86 views
1

我試圖將一個靜態方法添加到我的模型,但如果我這樣做,我得到這個錯誤:An interface may only extend a class or another interface.使用typescript&mongoose的靜態方法會:「一個接口只能擴展一個類或另一個接口。」

這是我的代碼:

import * as mongoose from 'mongoose'; 
import {IPermission} from './IPermission'; 

export interface IRoleDocument extends mongoose.Document { 
    name: string, 
    inherit_from: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Role' 
    }, 
    permissions: Array<IPermission> 
}; 

export interface IRole extends mongoose.Model<IRoleDocument> { 

}; 

錯誤來自export interface IRole extends mongoose.Model<IRoleDocument>

格爾茨

回答

1

據我所知,它是不可能從typescript中的交集/聯合類型繼承的。而在貓鼬類型定義的情況下mongoose.Model<T>聲明爲路口類型:

type ModelConstructor<T> = IModelConstructor<T> & events.EventEmitter; 

有關如何使用貓鼬在打字稿,你可以檢查此topic on SA

例子,但你仍然可以使用交集,而不是繼承得到你需要的接口,如:

interface IRoleDefinition 
{ 
    myExtraProperty: string; 
} 

type IRole = mongoose.Model<IRoleDocument> & IRoleDefinition; 

更多交集類型的信息VS繼承:github

+0

我讀了SA的線程。但是沒有靜態方法的聲明。如果我在你的例子中做了IRoleDefinition定義,但是不是靜態的。對於TypeScript,IRoleDocument中的成員不存在。 – R3Tech

+0

我不是貓鼬的專家。爲了幫助我,我想澄清以下幾點:1)接口不能同時聲明靜態和實例方法 - 通常使用兩個單獨的接口2)不可能擴展mongoose.Model ,因爲它是交叉類型。 – Amid

+0

我googled如何創建靜態方法,打字稿找到和我寫的方式是答案......也許是一種墮落的方式。我知道接口只能有一種方法類型,但是如何告訴打字稿我的意思是?第二點,我不清楚...... – R3Tech

相關問題