filmov
tv
Что такое keyof в TypeScript? | Основы TypeScript #frontend #javascript #react #typescript

Показать описание
Для чего нужен оператор keyof в typescript?
В _TypeScript_ существует возможность выводить все публичные, нестатические, принадлежащие типу ключи и на их основе создавать литеральный объединенный тип (`Union`). Для получения ключей нужно указать оператор `keyof`, после которого указывается тип, чьи ключи будут объединены в тип объединение `keyof Type`.
type AliasType = { f1: number; f2: string };
interface IInterfaceType {
f1: number;
f2: string;
}
class ClassType {
f1: number;
f2: string;
}
let v1: keyof AliasType; // v1: "f1" | "f2"
let v2: keyof IInterfaceType; // v2: "f1" | "f2"
let v3: keyof ClassType; // v3: "f1" | "f2"
let v4: keyof number; // v4: "toString" | "toFixed" | "toExponential" | "toPrecision" | "valueOf" | "toLocaleString"
Оператор `keyof` может применяться к любому типу данных.
Это аналогично тому, если бы мы указали union тип
type AliasType = { f1: number; f2: string };
type AliasKeys = "f1" | "f2"
let v1: keyof AliasType; // v1: "f1" | "f2"
let v2: AliasKeys
v1 = "f1"
v2 = "f2"
Только нам не требуется самим перечислять все поля. А мы их подхватываем на лету.
#reactjs
#javascript
#typescript
#usestate
#useeffect
#frontend
В _TypeScript_ существует возможность выводить все публичные, нестатические, принадлежащие типу ключи и на их основе создавать литеральный объединенный тип (`Union`). Для получения ключей нужно указать оператор `keyof`, после которого указывается тип, чьи ключи будут объединены в тип объединение `keyof Type`.
type AliasType = { f1: number; f2: string };
interface IInterfaceType {
f1: number;
f2: string;
}
class ClassType {
f1: number;
f2: string;
}
let v1: keyof AliasType; // v1: "f1" | "f2"
let v2: keyof IInterfaceType; // v2: "f1" | "f2"
let v3: keyof ClassType; // v3: "f1" | "f2"
let v4: keyof number; // v4: "toString" | "toFixed" | "toExponential" | "toPrecision" | "valueOf" | "toLocaleString"
Оператор `keyof` может применяться к любому типу данных.
Это аналогично тому, если бы мы указали union тип
type AliasType = { f1: number; f2: string };
type AliasKeys = "f1" | "f2"
let v1: keyof AliasType; // v1: "f1" | "f2"
let v2: AliasKeys
v1 = "f1"
v2 = "f2"
Только нам не требуется самим перечислять все поля. А мы их подхватываем на лету.
#reactjs
#javascript
#typescript
#usestate
#useeffect
#frontend
Комментарии