Javascript FlowType:函数的返回类型(k)=>;obj[k]
我有一个Javascript FlowType:函数的返回类型(k)=>;obj[k],javascript,flowtype,Javascript,Flowtype,我有一个用户对象: type User = { name: string, }; 它有一个get()函数,该函数接受User上属性的键并返回该属性。 函数get是 User.prototype.get = (prop) => { return this[prop]; }; 如何编写此函数定义? 以下是我目前得到的信息: type User = { name: string, get: (k: $Keys<User>) => any, // How ca
用户
对象:
type User = {
name: string,
};
它有一个get()
函数,该函数接受User
上属性的键并返回该属性。
函数get是
User.prototype.get = (prop) => {
return this[prop];
};
如何编写此函数定义?
以下是我目前得到的信息:
type User = {
name: string,
get: (k: $Keys<User>) => any, // How can I change any to the correct property type ?
};
类型用户={
名称:string,
get:(k:$Keys)=>any,//如何将any更改为正确的属性类型?
};
似乎您现在可以使用$ElementType
。
待确认
资料来源:
编辑:
/*@flow*/
类型用户={
名称:string,
年龄:数字,,
}
常量用户:用户={
姓名:“Ilyes”,
年龄:21岁,
}
函数get(键:K):$ElementType{
返回用户[键];
}
常量编号:number=get('name');//错误
常量number2:number=get('age');//作品
常量字符串:string=get('name');//作品
常量string2:string=get('age');//错误
预期的类型是什么<代码>字符串?如果要将age:number
属性添加到User
,它会是string | number
?是的。但是返回类型应该是obj[prop]
的返回类型,因此我们可以更精确地进行类型检查。如果使用“name”调用,则预期类型为“string”,如果使用“age”调用,则预期类型为“number”。我不知道现在使用Flow是否可以进行这种动态键入不确定Flow,但在TypeScript中您可以编写get(key:t):User[t]
/* @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