此代码:
import * as React from 'react';
const Component = () => <div/>;
function culprit<P>(node: React.ReactElement<P>) {
console.log(node);
}
culprit(<Component/>);...produces使用TypeScript编译时出现此编译错误:
错误TS2345:类型'Element‘的参数不能分配给'ReactElement’类型的参数。类型'null‘不能指定为'ReactElement’
只有当strictNullChecks TypeScript编译标志设置为true时才会发生这种情况。
是的,我可以禁用该标志,但为了增加编译时检查/安全性,我希望它能打开。
如果我将最后一行改为:
culprit( (<Component/> as React.ReactElement<any>) );...it使用设置为true的标志。
最近,我在一个React项目中尝试从“普通”JavaScript迁移到TypeScript,这使我的所有测试都失败了,因此在测试代码中将所有TypeScript类型断言添加到所有这些事件中都会很痛苦。
这是个窃听器,还是我别无选择?
发布于 2017-02-04 12:33:57
这显然是15.0.5 React类型定义中引入的一个问题。如果你改到15.0.4,一切都会好起来的。
见本期:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/14284
发布于 2019-05-20 09:05:20
如果组件或组件中有JSX,则测试文件必须以.tsx作为文件扩展名。我的代码没有编译,因为我有.ts文件扩展名。从我将它重命名为.tsx/jsx的那一刻起,它就开始很好地工作了!
还请注意,我使用的是类型记录,所以我将它重命名为.tsx。如果您正在使用ES6,请将它重命名为.jsx。
https://stackoverflow.com/questions/42036992
复制相似问题