typescript - 启用 StrictFunctionTypes 的类型检查
问题描述
启用 strictFunctionTypes 是否无法键入检查此代码?
interface CommonBook {
a: string;
}
interface GoodBook extends CommonBook {
b: string;
}
interface BadBook extends CommonBook {
c: string;
}
type ListRenderItem<ItemT> = (item: ItemT) => null;
const renderBook = (renderAnyBook: ListRenderItem<CommonBook>) => renderAnyBook({ a: '' });
const renderGoodBook: ListRenderItem<GoodBook> = () => null;
renderBook(renderGoodBook);
解决方案
要使 renderBook 与各种渲染函数一起工作,同时仍然强制类型安全,您可以将其转换为泛型:
const renderBook = <T extends CommonBook>(renderAnyBook: ListRenderItem<T>) =>
renderAnyBook({ a: '' });
但是,如果您这样做,您会发现一个错误:您正在调用renderAnyBook({ a: '' })
,但这仅在使用 . 调用该函数时才有效ListRenderItem<CommonBook>
。例如,如果使用 a 调用ListRenderItem<GoodBook>
,则需要将 GoodBook 传递给 renderAnyBook,而{ a: '' }
不是 GoodBook。
从提供的信息中我可以看出,这是 typescript 的工作,指出您的代码有错误。编写的函数没有正确调用 renderAnyBook,需要修改。如果没有更多信息,我无法说出确切的修改。也许您需要放松 GoodBook/BadBook 上的类型,以便额外的属性是可选的。
推荐阅读
- spring - 使用 Spring Batch StaxEventItemReader 处理非根 XML 元素
- javascript - 如何在反应中从modal1的按钮打开modal2
- python - 获取熊猫数据框列日期时间格式
- dotnetnuke - DNN:如何将我在 sublime 文本上设计的现有 HTML/CSS/JS 网站转换为 DNN?(DNN 7.9.2)
- javascript - onpopstate 和 pushstate 不起作用 - 不知道为什么
- python - 如何使用 Bs4 从 DOM 层次结构的不同位置提取类似的信息?
- excel - 在 vba 中添加验证导致错误 1004
- c# - 如何在 QueryAsync 中使用现成的 Func<> 委托?
- r - mutate_at 在无法插入组时停止,tryCatch 不起作用
- c# - 如何从存储过程中获取输出参数结果和查询结果?