type SeveralTypes = type0 | type1 | type2;
function funTypes<T extends SeveralTypes>(info: T, callback: (obj: T extends type2 ? number : string) => void) {
if (isType0(info)) {
return callback("passAstring"); // TS Warn: Argument of type '"passAstring"' is not assignable to parameter of type 'T extends boolean ? number : string'
} else if (isType1(info)) {
return callback("passAstring"); // TS Warn: Argument of type '"passAstring"' is not assignable to parameter of type 'T extends boolean ? number : string'
} else {
return callback(1001); // TS Warn: Argument of type '1001' is not assignable to parameter of type 'T extends boolean ? number : string'
}
}
funTypes(1, (d) => { }); // Typeof d --> string
funTypes("str", (d) => { }); // Typeof d --> string
funTypes(false, (d) => { }); // Typeof d --> number
While using this function, the inferred type of the parameter for the callback seems correct. However, TypeScript flags issues with assigning parameters. Is there an alternative method to type the callback parameters?