Как в TypeScript указать, что параметр метода должен быть определенного типа?

«Как в TypeScript указать, что параметр метода должен быть определенного типа?» — вопрос из категории TypeScript, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В TypeScript типы параметров указываются непосредственно в сигнатуре функции или метода.

Базовый синтаксис:

function greetUser(name: string): void {
    console.log(`Hello, ${name}!`);
}

const logMessage = (message: string, priority: number): void => {
    console.log(`[${priority}] ${message}`);
};

Union Types для нескольких допустимых типов:

function formatInput(input: string | number): string {
    return String(input).trim();
}

Использование интерфейсов и типов для объектов:

interface User {
    id: number;
    email: string;
    isActive?: boolean; // Опциональное свойство
}

function createUser(userData: User): User {
    return db.users.create(userData);
}

// Использование типа (Type Alias)
type FilterCallback = (item: any) => boolean;
function filterArray(arr: any[], callback: FilterCallback): any[] {
    return arr.filter(callback);
}

Дженерики (Generics) для гибкости:

function getFirstElement<T>(arr: T[]): T | undefined {
    return arr[0];
}
// Вызов: тип `T` выводится как `number`
const firstNum = getFirstElement([1, 2, 3]);

В классах:

class ApiService {
    async fetchData<T>(url: string): Promise<T> {
        const response = await fetch(url);
        return response.json() as T;
    }
}