Примитивные типы данных
// Типы данных
const isFetching: boolean = true;
const isLoading: boolean = false;
let int: number = 25;
const msg: string = 'hello';
const numberArray:number[] = [1, 2, 3];
// 2 равнозначные записи
const numberArray2:Array<number> = [1, 2, 3];
// Array<number> - дженерик типы, она указывает в треугольных скобках из чего состоит класс или объект
// тип данных Tuple - создаём массив из разных типов данных
const contact:[string, number] = ['user', 123456];
// тип данных Any - для переобределения типов
let variable:any = 42;
variable = [];
// тип данных для входящих переменных в функциях
function saveMyName(name: string):void {
console.log(name);
}
saveMyName('uses abuser');
// тип данных Never - когда функция возвращает ошибку и никогда не заканчивает своё выполнение, либо что либо делает
function throwError(message: string): never {
throw new Error(message);
}
function infinite(): never {
while(true){}
}
// Создание своих собственных типов через Type
type Login = string;
const login1: Login = 'user1';
type ID = string | number;
const id1: ID = 'sdasdasd';
const id2: ID = 546;
// типы данных null и undefined
type SomeType = string | null | undefined;
Интерфейсы
/*
Модификаторы
readonly - только для чтения
? - необязательный параметр
| - логическое или
*/
// Интерфейсы тип который описывает поля класса или объъекта. Они ни во что не компилируются
interface Rect {
readonly id: string | number
color?: string
size: {
width: number
height: number
}
}
const rect1:Rect = {
id: 1234,
size: {
width: 20,
height: 30
}
}
// Можно указывать к какому типу относится объект
const rect3 = {} as Rect;
// альтернативная запись
// const rect4 = <Rect>{};
продолжение
// Наследование интерфейсов
interface RectWithArea extends Rect{
getArea: () => number; // тип данных который долже быть возвращён
}
const rect5 : RectWithArea = {
id: 12,
size: {
width: 12,
height: 25
},
getArea(): number {
return this.size.width * this.size.height;
}
}
// Интерфейсы могут взаимодействовать с классами
// Большая буква I вначале говорит о том что это интерфейс
interface Iclock {
time: Date
setTime(date: Date): void
}
class Clock implements Iclock {
time: Date = new Date();
setTime(date: Date) {
this.time = date;
}
}
//========================
// Необходимо создать интерфейс для объекта у которого большое количество динамических ключей
// в квадратных скобках [] указываем тип ключа
// есть ключевое слово key для обозначения ключа
interface Styles {
[key: string]: string
}
const css: Styles = {
border: '1px solid red',
marginTop: '2px',
paddingTop: '2px',
}
https://youtu.be/nyIpDs2DJ_c?t=1938
https://www.typescriptlang.org/play#code/LAKFqA