Это не проблема TypeScript, а проблема EcmaScript: нет набора расширений Linq-y, но вы можете легко написать функцию, подобную этой:
const ls = [1, 2, 3, 3, 3, 4, 5, 6];
function single<T>(a: ReadonlyArray<T>, fallback?: T): T {
if (a.length === 1) return a[0];
if (a.length === 0 && fallback !== void 0) return fallback;
throw new Error();
}
// *** Single-like ***
const s1 = single(ls.filter(x => x === 1)); //found one
console.log(s1); //outputs 1
const s2 = single(ls.filter(x => x === 9)); //found none => throws
const s3 = single(ls.filter(x => x === 3)); //found many => throws
// *** SingleOrDefault-like (just add a valid fallback) ***
const s4 = single(ls.filter(x => x === 1), 0); //found one
console.log(s4);
const s5 = single(ls.filter(x => x === 9), 0); //found none => fallback
console.log(s5);
const s6 = single(ls.filter(x => x === 3), 0); //found many => throws
Также проверьте Неизменяемая. JS библиотека, в которой нет single
-функции, но очень близка к схеме Linq.