Typescript
React
Была такая проблема - я установил пакет 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