У меня есть объект User
:
type User = {
name: string,
};
У этого есть функция get()
, которая принимает параметр ключ атрибута для User
и возвращает этот атрибут. Функция get is
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 ?
};
Похоже, теперь вы можете использовать $ElementType<T, K>
. Подтверждаем!
Источник: https://github.com/facebook/flow/issues/4122#issuecomment-314700605
EDIT: рабочий пример
/* @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