BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース TypeScript 1.8はモジュール拡張のサポートを提供する

TypeScript 1.8はモジュール拡張のサポートを提供する

原文(投稿日:2016/03/01)へのリンク

MicrosoftはJavaScriptのスーパーセットでオープンソースであるTypeScriptのバージョン1.8をリリースした。

先月の言語の ベータ発表に続いて、MicrosoftのプログラムマネージャーであるBowden Kelly氏は、JavaScriptコードをTypeScriptプロジェクトに取り込むことができ、最新バージョンでは"モジュール拡張のフルサポートを提供"するTypeScript 1.8の発表というブログ投稿をした。

タイトルの通り、既存のモジュールを拡張しやすくなり、モジュール全体または一部をインポートしたいときにそれらを選択しやすくなるため、Kelly氏は「モジュール拡張によってユーザーはさらにモジュールライブラリを設計することができるようになる」と言う。これは周辺モジュール宣言の追加と既存の型の拡張によって実現される。

Kelly氏は以下の例を提示した:

// scale.ts
export class Scale {
    weightOnEarth(mass) {}
}
// advancedScale.ts
import { Scale } from "./scale" ;
// create augmentation for Scale
declare module "./scale" {
    // インターフェイス統合によるコアクラスの拡張
    interface Scale {
        weightOnMoon(mass); // みんながmoon weightを必要とするわけではない
    }
}
Scale.prototype.advancedMethod = /* 実装を挿入 */;

// consumer.ts
import { Scale } from "./scale";
import "./advancedScale";

let scale: Scale;
scale.weightOnMoon(10);  // ok

Microsoftは昨年9月のバージョン1.6ベータリリースでReactのサポートを開始して、バージョン1.8の安定リリースでReactのprops型の宣言を簡素化した。

端的に言うと、開発者はrefkeyや拡張React.Propsを明示的に宣言する必要がなくなる。その上、この更新ではrefkeyプロパティはすべてのコンポーネントで正しい型を表示することを意味し、refはステートレス関数コンポーネントのインスタンスで正しく許可されていない。

TypeSccript 1.8の改善は言語のunion/intersection型推論であり、たとえばstring | string[]string | Tに推論され、Tstring[]に復元されるため、Tstring[]に推論される。

type Maybe<T> = T | void;

function isDefined<T>(x: Maybe<T>): x is T {
    return x !== undefined && x !== null;
}

function isUndefined<T>(x: Maybe<T>): x is void {
    return x === undefined || x === null;
}

function getOrElse<T>(x: Maybe<T>, defaultValue: T): T {
    return isDefined(x) ? x : defaultValue;
}

function test1(x: Maybe<string>) {
    let x1 = getOrElse(x, "Undefined");         // string
    let x2 = isDefined(x) ? x : "Undefined";    // string
    let x3 = isUndefined(x) ? "Undefined" : x;  // string
}

function test2(x: Maybe<number>) {
    let x1 = getOrElse(x, -1);         // number
    let x2 = isDefined(x) ? x : -1;    // number
    let x3 = isUndefined(x) ? -1 : x;  // number
}

TypeScript 1.8の変更の完全な詳細はプロジェクトのGitHubであるここにある。

 

この記事に星をつける

おすすめ度
スタイル

BT