interface IdLabel {
id: number /* some fields */;
}
interface NameLabel {
name: string /* other fields */;
}
type NameOrId<T extends number | string> = T extends number
? IdLabel
: NameLabel;
createLabel<T extends number | string>(idOrName: T): NameOrId<T> {
if(typeof idOrName == "string"){
let temp = idOrName as string;
temp = temp.toUpperCase();
let result: NameOrId<T> = {name: temp} as NameOrId<T>;
return result;
}else {
let temp = idOrName as number;
temp = temp + 3344;
let result: NameOrId<T> = {id: temp} as NameOrId<T>;
return result;
}
}
let finalResult = this.createLabel(11);
alert(JSON.stringify(finalResult));