函数类型对于参数来说是逆变的,对于返回类型来说是协变的。在这种情况下,如何指定带有扩展
Container
类型的参数的泛型函数类型而不使用 any
?
type Container<V> = {
id: string;
join: (value: V) => void;
};
const process = <V extends Container<unknown>>(processFn: (container: V) => boolean) => {
// do something with processFn
}
type ExtendedContainer = Container<number> & { status: string; };
const processFn = (container: ExtendedContainer) => {
return true;
}
process(processFn);
我明白为什么会出错。我不明白的是,如何在不诉诸
any
类型声明中的 processFn
的情况下表达这样的系统?
否则,我如何确保 process
参数通常扩展类型 container
并获取其类型参数?