2017-09-18 19 views
0

は、ここでのコードは次のとおりです。typescriptですし、不変のjsインターフェイス

import {User} from "../../models/user"; 
import {Map} from "immutable"; 


    export interface State extends Map<string, any> { 
     user: User, 
     token: string, 
    }; 

    const initialState: State = Map<string, any>({ 
     user: null, 
     token: null, 
    }); 

が、私はこのエラーしている:私はそれをどのように

Error:(11, 7) TS2322:Type 'Map<string, any>' is not assignable to type 'State'. 
    Property 'user' is missing in type 'Map<string, any>'. 

を修正できますか?

答えて

1

Mapオブジェクトにはusertokenのプロパティが含まれていないため、タイプStateに割り当てることはできません。したがって、Mapを使用すると、静的な入力を失います。

私は強く地図の代わりにRecordを使用することをお勧めします。

export interface IState { 
    user: User, 
    token: string, 
} 

export const State = Immutable.Record<IState>({ 
    user: null, 
    token: null 
}); 

const initialState = new State(); 
let state = initialState.set('token', '123'); 
let token = state.get('token'); 

あいにくのFacebookから定義を入力するには多少間違っている、しかし、あなたがReadonly<T>宣言を追加した場合、あなただけのstate.tokenプロパティを読み取ることができます:

export interface Instance<T extends Object> { 
    ... 
    set<K extends keyof T>(key: K, value: T[K]): this & Readonly<T>; 
    update... : this & Readonly<T>; 
    ... 
} 
レコードについて:

More

関連する問題