不可能通过启用的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);
答案 0 :(得分:0)
要使renderBook与各种渲染功能一起使用,同时仍在加强类型安全性,您可以将其变成通用类型:
const renderBook = <T extends CommonBook>(renderAnyBook: ListRenderItem<T>) =>
renderAnyBook({ a: '' });
但是,如果执行此操作,则会发现错误:您正在调用renderAnyBook({ a: '' })
,但这仅在使用ListRenderItem<CommonBook>
调用函数时才有效。例如,如果使用ListRenderItem<GoodBook>
进行调用,则需要将GoodBook传递到renderAnyBook中,而{ a: '' }
不是GoodBook。
从提供的信息中我可以最好地看出,这是打字稿,正在努力指出您的代码有错误。编写的函数未正确调用renderAnyBook,需要进行修改。没有更多的信息我无法告诉您确切的修改。也许您需要放松GoodBook / BadBook上的类型,以便额外的属性是可选的。