2017-06-06 69 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