generics - React-redux-hooks med TypeScript


Jag använder react-redux-hooken useSelector med TypeScript. Finns det något stöd för statisk typning? Nu måste jag göra en typomvandling med as-nyckelordet.

interface User { age: number }

const selectUser = (state): User => state.user.detail

const MyComponent = () => {

    const user1 = useSelector(selectUser)
    user1.age = 'This is not number.' // No warning or error.

    const user2 = useSelector<User>(selectUser)
    user2.age = 'This is not number.' // No warning or error.

    const user3 = useSelector(selectUser) as User
    user3.age = 'This is not number.' // TS2339 error, but with casting.

}

Svar #1

useSelector har två typparametrar <TState, TSelected>, den andra parametern är typen av det valda värdet. Så detta fungerar:

const user = useSelector<TState, User>(selectUser)