TypeScript Version: 2.2.1
Code
interface NumberOption {
returnNumber: true;
}
interface NoNumberOption {
returnNumber?: false;
}
function eitherOuter(option: NumberOption): number;
function eitherOuter(option: NoNumberOption): string;
function eitherOuter(option: NumberOption | NoNumberOption = {}): string | number {
// return eitherInner(option); // Does not compile
if (option.returnNumber === true) {
return eitherInner(option);
} else {
return eitherInner(option);
}
}
function eitherInner(option: NumberOption): number;
function eitherInner(option: NoNumberOption): string;
function eitherInner(option: NumberOption | NoNumberOption = {}): string | number {
if (option.returnNumber) {
return 1;
} else {
return 's';
}
}
const n = eitherOuter({ returnNumber: true });
const s1 = eitherOuter({ returnNumber: false });
const s2 = eitherOuter({});
Expected behavior:
I would expect to be able to delegate from eitherOuter to eitherInner without any special annotations.
Actual behavior:
Delegating from eitherOuter to eitherInner is not possible, instead the simplest workaround I was able to find was to write an if statement, which had the same statement in both branches.
TypeScript Version: 2.2.1
Code
Expected behavior:
I would expect to be able to delegate from
eitherOutertoeitherInnerwithout any special annotations.Actual behavior:
Delegating from
eitherOutertoeitherInneris not possible, instead the simplest workaround I was able to find was to write anifstatement, which had the same statement in both branches.