Подтвердить что ты не робот

Предоставляет ли TypeScript псевдонимы типов?

Поэтому я хотел бы использовать псевдоним для уродливого типа, который выглядит следующим образом:

Maybe<Promise<Paged<Carrier>, Problem>>[]

Что-то вроде:

import Response = Maybe<Promise<Paged<Carrier>, Problem>>[];

Есть ли способ сделать псевдонимы типа в TypeScript?

4b9b3361

Ответ 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;