如何在打字稿中扩展React.SFC类型

时间:2018-09-01 02:35:18

标签: reactjs typescript

在反应键入中,我们发现以下内容:

const blob = await ipfs.getBlobFromStream(hash)

const url = URL.createObjectURL(blob)

this.setState({...this.state, videoSrc: url})

const getBlobFromStream = async (hash) => {

  return new Promise(async resolve => {

    let entireBuffer

    const s = await stream(hash)
    s.on('data', buffer => {

      console.log(buffer)

      if (!entireBuffer) {
        entireBuffer = buffer
      }
      else {
        entireBuffer = concatTypedArrays(entireBuffer, buffer)
      }

    })

    s.on('end', () => {

      const arrayBuffer = typedArrayToArrayBuffer(entireBuffer)
      const blob = new Blob(arrayBuffer)
      resolve(blob)
    })

  })

}

我想用属性type SFC<P = {}> = StatelessComponent<P>; interface StatelessComponent<P = {}> { (props: P & { children?: ReactNode }, context?: any): ReactElement<any> | null; propTypes?: ValidationMap<P>; contextTypes?: ValidationMap<any>; defaultProps?: Partial<P>; displayName?: string; } 对其进行扩展。我在fragment文件夹中创建了index.d.ts,但无法弄清楚如何正确扩展类型,因此不会破坏其余的代码。我尝试过类似的事情:

typings/react

但是它基本上破坏了JSX代码

有正确的方法吗?

谢谢

1 个答案:

答案 0 :(得分:2)

不可能覆盖这样的类型别名。而是使用相同的模块名称声明自己的StatelessComponent接口,它将与原始接口合并。这是正确的语法:

declare module "dummy" {
  module "react" {
    interface StatelessComponent<P = {}> {
      fragment?: any;
    }
  }
}

需要外部模块声明以使内部模块声明成为“增强”,而不是遮盖原始模块,如this thread中所述。不幸的是,该技巧没有正确记录AFAIK。

相关问题