Skip to content

Instantly share code, notes, and snippets.

@disco0
Last active September 16, 2020 03:43
Show Gist options
  • Save disco0/02e08aa77b1ccf131f2383a13b04223b to your computer and use it in GitHub Desktop.
Save disco0/02e08aa77b1ccf131f2383a13b04223b to your computer and use it in GitHub Desktop.
typescript-ifArray-conditional-return
type AnyArray = any[];
type NotArray = Exclude<any, AnyArray>;
//#region ifArray
//#region Definition
function ifArray<T, F, O extends Array<any> = Array<any>>(obj: O, isTrue: T, isFalse: F): T;
function ifArray<T, F, O extends Exclude<any, any[]>>(obj: O, isTrue: T, isFalse: F): F;
function ifArray<T, F, O>(obj: O, isTrue: T, isFalse: F): T | F
{
if(Array.isArray(obj)) return isTrue; else return isFalse;
}
//#endregion Definition
//#region Testing
{
//#region Constants
const IS_ARRAY: Array<number> = [1,2,4,5,5,]
const IS_NOT_ARRAY: object = { notArray: "FFFF" };
const IS_NUM: number = 5;
const IS_STR: string = "F";
//#region Test Shape / Declaration
interface ReturnObj
{
(prop: any): 5; "5": Window
};
const RET_OBJ = Object.assign(
function(prop: any){ return 5 },
{
'5': window
}
);
//#endregion Test Shape / Declaration
//#endregion Constants
//#region Tests
//#test Return String
{
let TRUE_STR: string = ifArray(IS_ARRAY, IS_STR, IS_NUM);
//@ts-expect-error
let ERR_TRUE_STR: string = ifArray(IS_ARRAY, IS_NUM, IS_STR);
let FALSE_STR: string = ifArray(IS_NOT_ARRAY, IS_NUM, IS_STR);
//@ts-expect-error
let ERR_FALSE_STR: string = ifArray(IS_ARRAY, IS_NUM, IS_STR);
}
//#test Return Object
{
let TRUE_STR: ReturnObj = ifArray(IS_ARRAY, RET_OBJ, IS_NUM);
//@ts-expect-error
let ERR_TRUE_STR: ReturnObj = ifArray(IS_ARRAY, IS_NUM, RET_OBJ);
let FALSE_STR: ReturnObj = ifArray(IS_NOT_ARRAY, IS_NUM, RET_OBJ);
//@ts-expect-error
let ERR_FALSE_STR: ReturnObj = ifArray(IS_ARRAY, IS_NUM, RET_OBJ);
}
//#endregion Tests
}
//#endregion Testing
//#endregion ifArray
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment