Основы

Знак вопроса ?

? - знак вопроса после переменной означает, что её значение можно не передавать. Необязательный параметр

//Необязательный параметр
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> = {};