Учебник о том, как работает оператор typeof в TypeScript.

В JavaScript у нас уже есть ванильный оператор typeof, который можно использовать для определения типа чего угодно:

let x = "hello world";
console.log(typeof x); // Returns "string"

Поскольку TypeScript является строго типизированным языком, typeof имеет немного другое значение. Хотя для всех базовых типов JavaScript функциональность typeof остается неизменной, он также получает некоторые дополнительные полезные функции. Давайте посмотрим, как typeof работает в TypeScript.

Как typeof работает в TypeScript

Самое основное применение typeof в TypeScript — создание новых базовых типов. Если мы определяем наши собственные пользовательские типы в TypeScript, мы можем использовать typeof для копирования типа существующего элемента. Простой пример, когда мы берем number и создаем на его основе пользовательский тип, выглядит так:

let x = 1234;
// Custom type aNumber
type aNumber = typeof x;

Это может быть полезно, если типы переменных могут различаться, и мы хотим сопоставить конкретную переменную. Это также может быть полезно при создании пользовательских типов со многими свойствами, где свойства должны соответствовать существующим типам переменных:

let x = 1234;
let y = "string";
// Custom type aNumber
type myType = {
    name: typeof y,
    age: typeof x,
}

Как видите, typeof в основном дает нам способ различать значение и тип существующего объекта. Его также можно интуитивно комбинировать с ReturnType, чтобы получить возвращаемое значение функции, чтобы обеспечить согласованность типов при ожидании значений от функций:

function myFunction(x: string, y: string) {
    return { 
        firstName: x,
        lastName: y
    }
}
type nameType = ReturnType<typeof myFunction>;

В этой статье я подробно рассказал о ReturnType, так что ознакомьтесь с ней, если хотите узнать больше. Точно так же вы можете узнать больше о TypeScript здесь.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.