活字体3.5のリリース、より速く、よりインテリジェントなツール

活字体3.5のリリース、このバージョンでは、コンパイラ、言語や編集ツールで、いくつかの新機能をもたらします。

スピードブースト

速度が劇的に増加するように活字体3.5は、チェックとインクリメンタルビルドのタイプのために最適化されたいくつかを紹介します。

型検査は加速します

偶然の活字体3.4は、それが実行される増加ワークロード・タイプ・チェックにつながる可能性が、フォールバックを導入し、ユーザーが大きな影響を受けるコンポーネントのスタイルライブラリを使用することを可能にする時の型チェック、の対応する増加。

フォールバックだけではなく、それはビルド時の活字体のコードにつながるためには非常に長くなり、非常に深刻ですが、また、活字体およびJavaScriptエディタのユーザ操作が非常に遅くなります。

このバージョンでは、いくつかのコードパスの最適化に焦点を当て、いくつかの機能は、3.5刻み活字体3.3よりも早く検査中に何度も活字体を剥奪します。3.4、コンパイル時間を短縮するだけでなく、自動コード補完と比べても速くなり、他のエディタを操作します。

--incremental改善

活字体3.4は、ファイルがTSCへの後続の呼び出しをスピードアップするために使用することができ、ファイルを.tsbuildinfoする情報の束を救う新しい--incrementalコンパイラオプションを紹介します。

3.5状態を設定するキャッシュの最適化に使用しているコンパイラのいくつかのバージョンがありますが、ファイルの原因を見つけ、ファイルやその他の情報の場所を見つけます。試験結果は--buildモードプロジェクトで活字体の使用は、時間が68%低減することができる再構築活字体3.4と比較して、シーンの数百を引用していることを示しています。

ヘルパー・タイプを省略

私たちは、目標を作成したい多くの時間は、特定の属性を省略し、活字体はピックを構築し、ヘルパーが同様の機能を実行することができ除外します。私たちは人の属性ではない場所を定義したい場合たとえば、あなたは次のように記述することができます。

type Person = {
    name: string;
    age: number;
    location: string;
};

type RemainingKeys = Exclude<keyof Person, "location">;

type QuantumPerson = Pick<Person, RemainingKeys>;

// equivalent to
type QuantumPerson = {
    name: string;
    age: number;
};

本明細書で使用されるプロパティの相手からヘルパータイプを除外プロパティセットの残りの人物から選択ピックヘルパータイプを使用し、その後、「場所」属性を除去するために濃縮しました。

このタイプの動作は、多くの場合、ユーザーが操作を完了するために省略ヘルパータイプを記述します:

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

活字体3.5は、lib.d.tsは省略形を構築し、開発者は、もはや自分自身を記述する必要がない、どこでも使用することができます。

誰もが自分自身の省略バージョンを定義し、活字体3.5はlib.d.tsに、独自のバージョンが含まれていますどこでも使用することができます。コンパイラ自体は、ジェネリック医薬品の残りのオブジェクトのデストラクタの宣言によって作成されたタイプを表現するために、この省略形を使用しています。

関節の検査の改善された余剰財産の種類

活字体は、この機能は、特定の属性に準拠していない問題の種類を検出するように設計され、対象の余剰財産検査と呼ばれる機能があります。

type Style = {
    alignment: string,
    color?: string
};

const s: Style = {
    alignment: "center",
    colour: "grey"
//  ^^^^^^ error! 
};

活字体3.4およびそれ以前のバージョンでは、特定の過剰プロパティを許可します。以下は、オブジェクトの活字体3.4 nameプロパティは、そのタイプがポイントラベルと一致しない場合でも、正しくないことができます。

type Point = {
    x: number;
    y: number;
};

type Label = {
    name: string;
};

const thing: Point | Label = {
    x: 0,
    y: 0,
    name: true // uh-oh!
};

、メンバーは余分なプロパティインスペクターではありませんので、間違った名前を心配することはありませんので、しかし、活字体3.5で、現在は少なくとも型チェッカーは、提供されるすべてのプロパティを確認する組合員の一部であり、適切なタイプを持っていますこれは、上記の例では、エラーをスローすることを意味します。

限り、プロパティの型が有効であるとして、なお、まだいくつかの重複を許可します:

const pl: Point | Label = {
    x: 0,
    y: 0,
    name: "origin" // okay
};

--allowUmdGlobalAccessフラグ

新しい--allowUmdGlobalAccessフラグは、今でもグローバル宣言、次のようなUMD参照モジュールで、どこからでも行うことができます。

export as namespace foo;

高次ジェネリック型推論のコンストラクタ

ジェネリックコンストラクタの活字体3.5導出演算アップ統合:

class Box<T> {
    kind: "box";
    value: T;
    constructor(value: T) {
        this.value = value;
    }
}

class Bag<U> {
    kind: "bag";
    value: U;
    constructor(value: U) {
        this.value = value;
    }
}


function composeCtor<T, U, V>(
    F: new (x: T) => U, G: new (y: U) => V): (x: T) => V {
    
    return x => new G(new F(x))
}

let f = composeCtor(Box, Bag); // has type '<T>(x: T) => Bag<Box<T>>'
let a = f(1024); // has type 'Bag<Box<number>>'

特定のUIライブラリコンポーネントに新しい汎用コンストラクタクラスの導出機能動作(例えば、反応させ)ジェネリッククラスアセンブリが動作より正確にすることができることを意味する上記組合せパターンに加えて。

type ComponentClass<P> = new (props: P) => Component<P>;
declare class Component<P> {
    props: P;
    constructor(props: P);
}

declare function myHoc<P>(C: ComponentClass<P>): ComponentClass<P>;

type NestedProps<T> = { foo: number, stuff: T };

declare class GenericComponent<T> extends Component<NestedProps<T>> {
}

// type is 'new <T>(props: NestedProps<T>) => Component<NestedProps<T>>'
const GenericComponent2 = myHoc(GenericComponent);

スマートセレクト

以下に示すように、テキストの選択範囲を拡大する機能を活字体エディタのAPIを提供して3.5スマート選択、文法ベースのアプローチを追加しました、この機能は、よりインテリジェントエディタでコードの適切な構文構造を選択することができます。

また、この機能は使用する正しい活字言語エディタにアクセスすることができます任意のサーバーで使用可能な、クロスプラットフォームです。

ローカル型の別名にエクスポートタイプ

中国の開発者王Wenlu(でこれらの機能@Kingwlの貢献)。

完全なアップデートは、公式ブログをチェックアウト:

https://devblogs.microsoft.com/typescript/announcing-typescript-3-5

おすすめ

転載: www.oschina.net/news/107096/typescript-3-5-released