interface InsertFunc {
<T>(array: T[], value: T): T[]
}
function insertAtBeginning<T>(array: T[], value: T): T[] {
return [value, ...array]
}
const numArray = insertAtBeginning<number>([1, 2, 3], 0);
const strArray = insertAtBeginning<string>(['b', 'c', 'd'], 'a');
const insertFunc:InsertFunc = (array, value) => [value, ...array]
const booleanArr = insertFunc([true, false, true], false);
const insertFunc2: <T>(arr: T[], value: T) => T[] = (arr, value) => [value, ...arr];
const insertFunc3: InsertFunc = function<T>(arr: T[], val: T): T[] {
return [val, ...arr]
}
const resultOfInsertFunc2: InsertFunc = (arr, val) => [val, ...arr];
const result: InsertFunc = insertAtBeginning
const test1 = result([1, 2, 3], 0);
const test2 = result(['b', 'c', 'd'], 'a');