是否有可能在 Typescript 中创建减法类型?我正在考虑一个用户案例,当 React 组件仅向组件用户公开 if 道具的子集时。React-redux 连接示例:
import {Component, ComponentType} from 'react';
export function connect<S, A>(state: () => S, actions: A){
return function createConnected<P>(component: ComponentType<P>){
return class Connect extends Component<P-S-A>{ // <--
// ...
}
}
}
阅读后: 从类型中排除属性
似乎我得到了这个工作......
import {Component, ComponentType} from 'react';
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
function connect<S, A>(state: () => S, actions: A) {
return function createConnect<P extends S & A>(C: React.ComponentType<P>): ComponentType<Omit<P, keyof S | keyof A>> {
return class Connect extends Component<Omit<P, keyof S | keyof A>> {
// ...
};
};
}
....但我不明白怎么做。
更新 2:
在玩了更多之后,我发现了一种更简洁的方式(在我看来),来描述一个减法类型:
// LeftOuterJoin
type Subtract<T, V> = Pick<T, Exclude<keyof T, keyof V>>;
function connect<S, A>(state: () => S, actions: A) {
return function createConnect<P>(C: ComponentType<P>) {
return class Connect extends Component<Subtract<P, S & A>> {
// ...
};
};
}