Это связано с тем, как классы могут также использоваться как типы, а consts
- нет. Когда вы экспортируете только базовый класс (без оператора connect
), ваш refRoom: React.RefObject<Room_T>;
действителен, так как Room_T
относится к классу.
Однако, когда вы экспортируете подключенный компонент, это не дольше класс и, следовательно, не может использоваться как тип. Вместо этого вы хотите использовать оператор typeof
, чтобы получить фактический тип, например React.RefObject<typeof Room_T>;
Надеюсь, этот фрагмент объясняет это немного лучше:
type I_PROPS = object
type I_STATE = object
class UnconnectedRoom extends React.Component {
render() {
return null
}
someMethod() {
console.log('called method')
}
}
const ConnectedRoom = connect(
() => {},
null,
(stateProps, dispatchProps) => ({}),
{
forwardRef: true,
}
)(UnconnectedRoom)
class App extends React.Component<I_PROPS, I_STATE> {
constructor(props: any) {
super(props)
this.connectedRoomRef = createRef()
this.unconnectedRoomRef = createRef()
}
render() {
console.log(this.unconnectedRoomRef.current?.someMethod())
console.log(this.connectedRoomRef.current?.someMethod())
return (
<Provider store={{}}>
<ConnectedRoom ref={this.connectedRoomRef} />
<UnconnectedRoom ref={this.unconnectedRoomRef} />
</Provider>
)
}
private connectedRoomRef: React.RefObject<typeof ConnectedRoom> // This is not a class and hence we're using the `typeof` operator
private unconnectedRoomRef: React.RefObject<UnconnectedRoom> // This is a class and can also be used as a type
}