Я новичок и в React, и в Typescript, и пытаюсь выяснить, может ли селектор возвращать пользовательский тип.
Это основной селектор, который возвращает пользователя типа Map<string, any>
:
селекторы / user.ts
import { createSelector } from 'reselect';
import { TypedMap } from 'reducers';
import { User } from 'types/api';
const rawSelectUser = (state: TypedMap) => state.get('session');
const selectUser = () =>
createSelector(
rawSelectUser,
substate => substate.get('user')
);
export default selectUser;
Интересно, смогу ли я заставить его вернуть тип User
, который яв другом месте моего приложения:
types / api.ts
export class User implements Serializable<User> {
id!: number;
firstName!: string;
lastName!: string;
name!: string;
email!: string;
isActive!: boolean;
role!: UserRole;
metadata?: any;
}
В конечном счете, я хочу, чтобы мои файлы .tsx использовали мой пользовательвведите от types/api.ts
.Но этот код в настоящее время выдает ошибку ниже:
index.tsx
...
const mapStateToProps = createStructuredSelector<TypedMap, LoginProps, User>({
user: selectUser()
});
const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) =>
bindActionCreators(
{
postLogin,
checkUserPresent
},
dispatch
);
const withConnect = connect(
mapStateToProps,
mapDispatchToProps
);
const themedComponent = withTheme(withStyles(styles)(Login));
export default compose(withConnect)(themedComponent);
mapDispatchToProps = (dispatch: Dispatch<AnyAction>) =>
... генерирует эту ошибку:
index.js:1437 /Users/username/sites/my-ui/src/containers/Login/index.tsx
TypeScript error in /Users/username/sites/my-ui/src/containers/Login/index.tsx(151,5):
Argument of type '{ user: OutputSelector<TypedMap, any, (res: Map<string, any>) => any>; }' is not assignable to parameter of type '{ id: ParametricSelector<TypedMap, LoginProps, number>; firstName: ParametricSelector<TypedMap, LoginProps, string>; lastName: ParametricSelector<TypedMap, LoginProps, string>; ... 6 more ...; fromState: ParametricSelector<...>; }'.
Object literal may only specify known properties, and 'user' does not exist in type '{ id: ParametricSelector<TypedMap, LoginProps, number>; firstName: ParametricSelector<TypedMap, LoginProps, string>; lastName: ParametricSelector<TypedMap, LoginProps, string>; ... 6 more ...; fromState: ParametricSelector<...>; }'. TS2345
149 | // }
150 | const mapStateToProps = createStructuredSelector<TypedMap, LoginProps, User>({
> 151 | user: selectUser()
| ^
152 | });
153 |
154 | const