Last active
September 16, 2020 03:43
-
-
Save disco0/02e08aa77b1ccf131f2383a13b04223b to your computer and use it in GitHub Desktop.
typescript-ifArray-conditional-return
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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