Interfaces & generics
An interface with an optional field, typed array literals, and a function with an explicit return type.
interface User {
name: string;
role: "admin" | "editor" | "viewer";
score?: number;
}
const users: User[] = [
{ name: "Vivek", role: "admin", score: 92 },
{ name: "Rahul", role: "editor", score: 78 },
{ name: "Amit", role: "viewer" },
];
function topScorer(list: User[]): User | undefined {
return [...list].sort((a, b) => (b.score ?? 0) - (a.score ?? 0))[0];
}
console.log(users.map((user) => user.name));
console.log("Top:", topScorer(users));
// Types are stripped before running, so a type error won't stop execution.
const total: number = users.reduce((sum, user) => sum + (user.score ?? 0), 0);
console.log("Total score:", total);