BT

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

| 作者: James Chesters フォローする 2 人のフォロワー , 翻訳者 尾崎 義尚 フォローする 0 人のフォロワー 投稿日 2016年3月7日. 推定読書時間: 4 分 |

原文(投稿日: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であるここにある。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT