2017-03-09 95 views
0

是否可以使用裝飾器來標記具有某些自定義信息的接口的某些屬性?使用裝飾器添加元數據到接口屬性

最好用一個例子來說明:

應用狀態接口:

persistState(state) { 
    let newState = {}; 

    Object.keys(state).forEach((key) => { 
     if (state[key] is decorated with @persist) { 
      newState[key] = state[key]; 
     } 
    }); 

    // Persist newState... 
} 

這是可能的:其中仍然存在的所有相關信息的狀態

export interface AppState { 
    @persist userData: UserData, 
    @persist selectedCompany: UserCompany, 

    // userCompanies should not be persisted since they are always 
    // fetched afresh from the server... 
    userCompanies: UserCompany[] 
} 

方法?
如果是這樣,我真的很感激一些資源,指向正確的方向!
如果不是,有沒有優雅的選擇?

+1

不,你不能在界面上使用裝飾器,如[文檔說](https://www.typescriptlang.org/docs/handbook/decorators.html):「裝飾器提供了一種方法來添加註釋和元「**類聲明和成員**的編程語法」。接口在運行時不存在,這是你無法向它們添加修飾器的原因。你可以改變你的接口類,然後你會很好去 –

+0

我認爲是這樣。我的應用程序狀態需要由純JS對象(redux)構建,這就是爲什麼我不能使用這個類... – suamikim

+0

裝飾器是*實驗*功能(至少與ECMAScript相比)。它們不是ES7的一部分。 –

回答

1

是否有可能使用裝飾用一些自定義的信息

號接口不能用裝飾的裝飾上的東西,實際存在在運行時最高工作可以用來標記接口的某些屬性。 (接口被擦除)。