Примечание на будущее:
Тип для createRef
изменился, поэтому этот ответ может быть несколько устаревшим.Тип теперь function createRef<T>(): {current: null | T}
.Все, что ниже, сохраняется для справки.
Взглянув на typedef для createRef()
, мы видим, что он возвращает объект такого типа:
{current: null | React$ElementRef<ElementType>}
Было бы немного многословно включать это каждый раз, когда мы хотели указать результат createRef()
, поэтому давайте сделаем вспомогательный тип.Типы React$XXX
должны быть внутренними.Поэтому мы будем использовать React.XXX
типы вместо:
type ReactObjRef<ElementType: React.ElementType> =
{current: null | React.ElementRef<ElementType>}
И затем мы будем использовать это так:
( Попробуйте )
import * as React from 'react'
type ReactObjRef<ElementType: React.ElementType> =
{current: null | React.ElementRef<ElementType>}
type ParentProps = {}
class ParentComponent extends React.Component<ParentProps, null> {
listRef: ReactObjRef<'ul'>
constructor(props: ParentProps) {
super(props);
this.listRef = React.createRef();
}
render() {
return (
<ChildComponent
listRef={this.listRef}
/>
);
}
}
type ChildProps = {
listRef: ReactObjRef<'ul'>,
};
const ChildComponent = (props: ChildProps) => {
const hoge = props.listRef.current;
return (
<div>
<ul ref={props.listRef}>
</ul>
</div>
)
}