版本是 15,所以没法用 React.createRef 所以写了 callback ref,但是一旦想抽成组件内部函数怎么写都写不对
class A extends Component<{}, {}> {
createRef = (element: HTMLDivElement | null) => this.rootElement = element
render() {
return (
<B ref={this.createRef}/>
)
}
}
type Bprops = {
ref: React.Ref<HTMLDivElement>
}
class B extends Component<Bprops> {
render() {
const {ref} = this.props
return <div ref={ref}/>
}
}
然后就报错
TS2322: Type '(element: HTMLDivElement | null) => HTMLDivElement | null' is not assignable to type '(Ref<PopUpAd> | undefined) & Ref<HTMLDivElement>'. Type '(element: HTMLDivElement | null) => HTMLDivElement | null' is not assignable to type 'string & ((instance: HTMLDivElement | null) => any)'. Type '(element: HTMLDivElement | null) => HTMLDivElement | null' is not assignable to type 'string'.
完全不知道报错的这些东西哪来的,react 的定义里就一句
type Ref<T> = string | { bivarianceHack(instance: T | null): any }["bivarianceHack"];
而且定义里的 string 是或,而报错里的是交
想去掉报错只能把 createRef
的参数的类型声明去掉,实际上就相当于是 any 把
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.