ReactJS和Typescript:在此处被用作类型,但它是一个值的引用(TS2749)

246

我正在编写一个使用Typescript和Material-ui的ReactJS类,保存于.tsx文件中。在我的自定义组件中,我想创建一个对我使用的组件的引用。

export class MyTextField extends React.Component<MyProps, MyState> {
  private refTextField: React.RefObject<TextField>;
  constructor(props: MyProps) {
    super(props);
    this.refTextField = React.createRef();
  }

  render(): JSX.Element {
    const { id, label, value: defaultValue } = this.props;
    const { value } = this.state;
    const element = (
      <TextField ref={this.refTextField} id={id} label={label} defaultValue={defaultValue} value={value} />
    );

    return element;
  }
}

编译时,在我的引用声明中出现错误:

'TextField' 指的是一个值,但在此处被用作类型。TS2749

我尝试在声明中加入 "typeof TextField",但在渲染时 valuing ref 属性时又出现了另一条信息:

类型 'RefObject<(props: TextFieldProps) => Element>' 不可分配给类型 '((instance: HTMLDivElement | null) => void) | RefObject | null | undefined'。类型 'RefObject<(props: TextFieldProps) => Element>' 不可分配给类型 'RefObject'。 类型 '(props: TextFieldProps) => Element' 中缺少以下属性:align、addEventListener、removeEventListener、accessKey 和其他 238 个属性。TS2322

有什么想法吗? 非常感谢。


可能相关 https://dev59.com/3FYN5IYBdhLWcg3w570u - Michael Freidgeim
我在我的情况下遇到了同样的问题,这个方法有效!https://dev59.com/LFIG5IYBdhLWcg3w9W3d#65332778 - Diego Arrieta
12个回答

0
首先将文件类型更改为.tsx
然后按下F1键,输入"重新加载窗口"
:)

你好。你在这里提供的答案并没有尝试回答问题。一个答案应该提供一个完整、有效的回答,解决原始问题的一部分或全部。请参阅如何撰写一个好的答案?你可以改进你的答案,或在被Stack Overflow点踩或删除之前删除它。 - undefined

0
如果TypeScript的类型是这样的,也可能发生这种情况。
const User = {
    email: string
}

替代

interface User {
    email?: string | undefined
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接