TypeSrcipt. Part 2
KeyOf
Оператор, который формирует литеральный тип из строк или чисел из типа
interface A {
prop1: number;
prop2: number;
prop3: number;
}
interface A {
prop1: number;
prop2: number;
}
Readonly, Readonly<T>
Оператор, который делает свойство типа только на чтение
Тип, который делает все свойства типа T только на чтение
interface A {
readonly prop: number;
}
const reaonlyD: ReadonlyArray<number> = [1, 2, 3];
const reaonlyE: readonly number[] = [10, 20, 30];
const reaonlyF: Readonly<number> = 10; // const reaonlyF = 10
const reaonlyF: Readonly<number> = 10; // const reaonlyF = 10
Partial<T>
Тип, который делает свойства типа T необязательными
interface A {
AA: number;
BB: number;
CC: number;
}
Omit<T, K>
Тип, который исключает из типа Т свойства
Pick<T, K>
Тип, который исключает из типа Т все свойства, кроме указанных
interface Todo {
title: string;
description: string;
completed: boolean;
}
type TodoPreview = Pick<Todo, 'title' | 'completed'>;
const todo: TodoPreview = {
title: 'Clean room',
completed: false
};
Exclude<T, E>
Тип, который исключает значения из литеральных типов. Omit только для литеральных
type T0 = Exclude<'a' | 'b' | 'c', 'a'>;
// T0: 'b' | 'c'
type T1 = Exclude<'a' | 'b' | 'c', 'a' | 'b'>;
// T1: 'c'
type T2 = Exclude<string | number | (() => void), Function>;
// T2: string | number
Extract<T, E>
Тип, который исключает все значения литерального типов, кроме переданных. Pick только для литеральных
type T0 = Extract<'a' | 'b' | 'c', 'a'>;
// T0: 'a'
type T1 = Extract<'a' | 'b' | 'c', 'a' | 'b'>;
// T1: 'a' | 'b'
type T2 = Extract<string | number | (() => void), Function>;
// T2: () => void
NonNullable<T>
Тип, который не дает присваивать значения null и undefined
type T0 = NonNullable<string | number | undefined>;
// T0 = string | number
type T1 = NonNullable<string[] | null | undefined>;
// T1 = string[]
const t: T1 = null;
// error. Type 'null' is not assignable to type 'string[]'
Parameters<T>
Тип, который формирует кортеж из входных параметров функции типа Т
type T0 = Parameters<() => string>;
// type T0 = [];
const t0: T0 = [];
const t0_2: T0 = [1, 2, 3];
// error. Type '[number, number, number]' is not assignable to type '[]'
type T1 = Parameters<(s: string) => void>;
// T1 = [s: string]
const t1: T1 = ['str'];
const t1_2: T1 = ['str1', 'str2'];
// error. Type '[string, string]' is not assignable to type '[s: string]'
type T2 = Parameters<<T>(a: string, b: number) => boolean>;
// T2 = [a: string, b: number]
type T4 = Parameters<any>;
// T4 = unknown[]
type T5 = Parameters<never>;
// T5 = never
- ConstructorParameters<Type>
- ReturnType<Type>
- InstanceType<Type>
- ThisParameterType<Type>
- OmitThisParameter<Type>
- ThisType<Type>
Record<U, T>
Тип, который формирует новый тип с полями из литерального типа U, где в свою очередь типы этих полей является типом T
interface ICat {
age: number;
breed: string;
}
type CatName = 'BORIS' | 'MURKA' | 'KISS KISS';
const cats: Record<CatName, ICat> = {
BORIS: { age: 10, breed: 'Persian' },
MURKA: { age: 5, breed: 'Maine Coon' },
['KISS KISS']: { age: 16, breed: 'British Shorthair' }
};
const objs: Record<'A' | 'B', { aa: boolean, bb: number }> = {
A: { aa: true, bb: 1 },
B: { aa: false, bb: 2 }
};
interface A {
A: number; B: string;
}
const objs: Record<keyof A, { aa: boolean, bb: number }> = {
Intrinsic String Manipulation Types
Встроенные типы манипуляций со строками
let upperText:Uppercase<string>;
upperText = "HELLO, WORLD";
upperText = "Hello, World";
// error. Type 'string' is not assignable to type 'Uppercase<string>'
let lowerText:Lowercase<string>;
lowerText = "hello, world";