Reactjs 使用通用React组件时,在TS 3.2+;

Reactjs 使用通用React组件时,在TS 3.2+;,reactjs,typescript,typescript3.0,Reactjs,Typescript,Typescript3.0,这段代码使用TypeScript 3.1.x编译得很好 从“React”导入React; 界面道具{ 错误:字符串; } 导出默认函数foo( ErrorCmp:React.ComponentType ) { return()=>{ 返回; } } 但如果我用TypeScript 3.2或更新版本编译它,我会 error TS2322: Type '{ error: string; }' is not assignable to type 'TErrorProps'. 这是TS 3.2中的

这段代码使用TypeScript 3.1.x编译得很好

从“React”导入React;
界面道具{
错误:字符串;
}
导出默认函数foo(
ErrorCmp:React.ComponentType
) {
return()=>{
返回;
}
}
但如果我用TypeScript 3.2或更新版本编译它,我会

 error TS2322: Type '{ error: string; }' is not assignable to type 'TErrorProps'.
这是TS 3.2中的回归还是3.2修复了我的代码所利用的漏洞

有趣的是,这段代码也无法在3.1中编译

interface IErrorProps {
    error: string;
}

export default function foo<TErrorProps extends IErrorProps>(
    ErrorCmp: (props: TErrorProps) => string
) {
    return () => {
        return ErrorCmp({ error: 'test error' });
    }
}

打字脚本是正确的。考虑以下事项:

foo<{error: string, whatever: number}>(obj => `${obj.error} (${obj.whatever})`);
foo(obj=>`${obj.error}(${obj.whatever})`);
这在泛型的约束下是有效的,因为
{error:string,whatever:number}
扩展了
{error:string}


但您仅使用
error
键调用它。它几乎肯定是无效的。

我在react apollo中使用ts 3.2+编译时遇到错误,我认为这是同一个问题。这似乎是一个相当糟糕的变化,所以我很惊讶没有发现太多的人点击这个。这是有道理的,似乎TS 3.2基本上修复了一个bug。谢谢
foo<{error: string, whatever: number}>(obj => `${obj.error} (${obj.whatever})`);