在反应键入中,我们发现以下内容:
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代码
有正确的方法吗?
谢谢
答案 0 :(得分:2)
不可能覆盖这样的类型别名。而是使用相同的模块名称声明自己的StatelessComponent
接口,它将与原始接口合并。这是正确的语法:
declare module "dummy" {
module "react" {
interface StatelessComponent<P = {}> {
fragment?: any;
}
}
}
需要外部模块声明以使内部模块声明成为“增强”,而不是遮盖原始模块,如this thread中所述。不幸的是,该技巧没有正确记录AFAIK。