Знак вопроса ?
? - знак вопроса после переменной означает, что её значение можно не передавать. Необязательный параметр
//Необязательный параметр
function имя_функции (имя_переменной?:тип): тип_возвращаемого_значения
//Параметр по-умолчанию
function имя_функции (имя_переменной?:тип = "значение"):тип_возвращаемого_значения
//Однотипные параметры
function имя_функции (...имя_переменной?:тип ):тип_возвращаемого_значения
Знак вопроса - необходим для того, чтобы сделать переменную необязательным типом . В противном случае объявленные переменные показывают « undefined », если эта переменная не используется.
export interface ISearchResult {
title: string;
lookupId?:string
}
Угловые скобки (<>)
Используются для явного указания типа для генериков (generic )
function identity<T>(arg: T): T {
return arg;
}
// явное указание типа
let output = identity<string>("myString");
// неявное указание типа,
// тип определяется компилятор просто проанализировал значение "myString" и установил T в значение его типа
let output2 = identity("myString");
Восклицательный знак !
Это Это непустой оператор утверждения Это способ рассказать компилятору "это выражение не может быть null или undefined
Этот оператор позволяет обращаться к полю структуры, которое может быть null без проверки на null.
Этот модификатор позволит нам проинициализировать свойство класса потом, где-то в коде, при включенной опции компиляции strictPropertyInitialization.
Приведение типов
interface Rect {
readonly id: string,
name?: string,
size: {
width: number,
height: number,
}
}
// 2 эквивалентные записи
const rect1 = {} as Rect
const rect2 = <Rect>{} // ошибка в коде!!!!
Enum
Классы
class Typescript {
version: string
constructor(version: string) {
this.version = version;
}
info (name: string): string {
return `Typescript version is ${this.version}`;
}
}
// прямая запись в конструктор
class Car {
readonly whels: number = 4;
constructor(readonly model: string){}
}
//эквивалентно
class Car2 {
readonly whels: number = 4;
readonly model: string;
constructor(model: string){
this.model = model;
}
}
public - создаются по умолчанию
private - тольк в классе в котором определены
protected - в классах потомках
Абстрактные классы - нужны на этапе разработки чтобы от них наследоваться. абстрактные методы - будут потом реализованы
guards - вспомогательные конструкции
function strip(x: string | number): string | number {
if (typeof x === 'number') {
return x.toFixed();
}
return x.trim();
}
Автосборка проекта
tsc --watch
Partial (сделать все члены объекта необязательными)
interface ProfileDto {
id: number;
active: boolean;
name: string;
company: string;
}
public formData: Partial<ProfileDto> = {};