1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
type Params = {
foo: string;
} & ({ tag: 'a'; type: number } | { tag: 'b'; type: string });
const getType = <P extends Params>(params: P) => {
const {
// Omit
foo,
...rest
} = params;
return rest;
};
declare const params: Params;
switch (params.tag) {
case 'a': {
// TS 4.2: number
// TS 4.3: string | number
const result = getType(params).type;
break;
}
case 'b': {
// TS 4.2: string
// TS 4.3: string | number
const result = getType(params).type;
break;
}
}
|