How's that again?

Typescript

React

React typescript cheatsheet

Была такая проблема - я установил пакет npm, написанный на typescript, и при компиляции мой проект все время ругался на то, что не может найти @types/react, хотя он был установлен и в корневом проекте и в зависимости.

Помогло прописать следующее в tsconfig.json:

"compilerOptions" : {
    "baseUrl": "./",
    "paths": {
      "*": ["node_modules/@types/*", "*"]
  }

Перегрузка конструкторов

Можно иметь несколько перегрузок конструкторов, но при этом только одна реализация. Все перегрузки должны быть автоматически приводимы к сигнатуре этой реализации.

Пример:

class Box {
    public x: number;
    public y: number;
    public height: number;
    public width: number;

    constructor();
    constructor(obj: IBox); 
    constructor(obj?: any) {    
        this.x = obj && obj.x || 0
        this.y = obj && obj.y || 0
        this.height = obj && obj.height || 0
        this.width = obj && obj.width || 0;
    }   
}

Констрэйнты

function loggingIdentity<T extends Lengthwise>(arg: T): T {
    console.log(arg.length);  // Now we know it has a .length property, so no more error
    return arg;
}

Классы и интерфейсы

Объявление класса автоматически создает интерфейс с таким именем, поэтому все классы можно использовать и как интерфейсы:

class Bar {
    y: number;
}

interface IBaz extends Bar { } // includes y: number

class CBaz implements Bar {
    y: number = 5;
}

Если есть несколько объявлений интерфейсов с одинакомым именем, то они будут смержены:

interface Foo {
    x: number;
}

interface Foo {
    y: string;
}

let g = {} as Foo;
g.x; // OK
g.y; // OK