2017-06-06 68 views
1

我有一個User對象:流動型:返回類型的函數(K)=> OBJ [k]的

type User = { 
    name: string, 
}; 

具有get()功能,即在參數取屬性的鍵上User並返回這個屬性。 函數得到的是

User.prototype.get = (prop) => { 
    return this[prop]; 
}; 

我怎麼可以這樣寫fonction定義是什麼? 這是我走到這一步:

type User = { 
    name: string, 
    get: (k: $Keys<User>) => any, // How can I change any to the correct property type ? 
}; 
+0

什麼是預期的類型? 'string'?如果你要添加'age:number'屬性到'User',它會是'string | number'? –

+0

是的。但是返回類型應該是'obj [prop]'的返回類型,所以我們可以更精確地進行類型檢查 – whitep4nther

+0

如果用'name'和'age'調用期望類型爲'string' 」。我不知道這種動態類型現在是否可以使用Flow – whitep4nther

回答

0

好像你現在可以使用$ElementType<T, K>。 待定!

來源:https://github.com/facebook/flow/issues/4122#issuecomment-314700605


編輯:Working example

/* @flow */ 

type User = { 
    name: string, 
    age: number, 
} 

const user: User = { 
    name: 'Ilyes', 
    age: 21, 
} 

function get<K: string>(key: K): $ElementType<User, K> { 
    return user[key]; 
} 

const number: number = get('name'); // error 
const number2: number = get('age'); // works 
const string: string = get('name'); // works 
const string2: string = get('age'); // error