2016-04-20 61 views
0

說我有一類這樣的:使用興農與打字稿和接口

export class User implements Employee { 
    lanId: string; 
    firstName: string; 
    lastName: string; 
} 

像這樣的接口:

export interface Employee { 
    firstName: string; 
    lastName: string; 
} 

我則想用興農作出虛假用戶:

user = sinon.createStubInstance(User); 

這給了這樣的錯誤:

無法將類型'SinonStub'轉換爲鍵入'Employee'。類型'Employee'具有非可選屬性'firstName',該類型在'SinonStub'類型中不存在。

看起來好像Typescript和Sinon一起不快樂。

有沒有辦法創建一個實現了Typescript接口的類的SinonStub?

+0

你的用戶類定義中有一個冒號,我猜這是一個錯字? – Paarth

+0

@Paarth - 我修好了。這是一個錯字。 – Vaccano

回答

0

user對象被標記爲'Employee'類型?如果是這樣,這個錯誤是有道理的。

sinon.createStubInstance(User)將返回一個滿足SinonStub接口的對象,因爲編譯器會警告接口不符合Employee接口。

如果您不註釋類型user typecript前進假設它是一個SinonStub並且您不會遇到問題。如果你沒有實際註釋它,那麼變量可能通過其他地方的用法隱式地獲得註釋。

如果這聽起來不對,你有沒有試圖完成的事情不在問題中?

+0

當你說「如果你不註釋用戶的類型」時,我不太關注你。我怎樣才能做到這一點?真的,我正在尋找一種方法來創建用戶的存根,而無需刪除Employee界面。 (如果可能的話) – Vaccano

+0

'user'變量是如何聲明的? – Paarth

+0

'let user = sinon.createStubInstance(User);' – Vaccano