Предоставляет ли TypeScript псевдонимы типов?
Поэтому я хотел бы использовать псевдоним для уродливого типа, который выглядит следующим образом:
Maybe<Promise<Paged<Carrier>, Problem>>[]
Что-то вроде:
import Response = Maybe<Promise<Paged<Carrier>, Problem>>[];
Есть ли способ сделать псевдонимы типа в TypeScript?
Ответы
Ответ 1
В версии 1.4 Typescript поддерживаются псевдонимы типов (источник).
Типовые псевдонимы
Теперь вы можете определить псевдоним для типа с использованием ключевого слова type:
type PrimitiveArray = Array<string|number|boolean>;
type MyNumber = number;
type NgScope = ng.IScope;
type Callback = () => void;
Типичные псевдонимы точно такие же, как и их исходные типы; это просто альтернативные имена.
И из версии 1.6 Typescript поддерживает псевдонимы универсального типа (источник).
Алиасы общего типа
Лидируя до Typescript 1.6, псевдонимы типов были ограничены как простые псевдонимы, которые сократили длинные имена типов. К сожалению, не имея возможности сделать эти общие, они имели ограниченное применение. Мы теперь разрешаем псевдонимы типов быть универсальными, предоставляя им полную выразительную способность.
type switcharoo<T, U> = (u: U, t:T)=>T;
var f: switcharoo<number, string>;
f("bob", 4);
Ответ 2
TypeScript поддерживает импорт, например:
module A {
export class c {
d: any;
}
}
module B {
import moduleA = A;
var e: moduleA.c = new moduleA.c();
}
module B2 {
import Ac = A.c;
var e: Ac = new Ac();
}
Обновление 1
Так как TS 1.4 мы можем использовать объявления типов:
type MyHandler = (myArgument: string) => void;
var handler: MyHandler;
Так как TS 1.6 можно использовать объявления локального типа:
function f() {
if (true) {
interface T { x: number }
let v: T;
v.x = 5;
}
else {
interface T { x: string }
let v: T;
v.x = "hello";
}
}
Ответ 3
Решение для бедных состоит в том, чтобы объявить фиктивную переменную (например, t
) с требуемым типом и использовать typeof t
вместо выражения длинного типа:
var t: { (x: number, f: { (foo: string, bar:boolean): void }): void };
var f: typeof t;
var g: typeof t;