2017-05-30 8 views
5

Haskell、Rustなどの言語は、MaybeまたはOptionの種類を提供します。 Javaの場合でも、今日はOptionalタイプがあります。オプションまたはオプションタイプ(オプション<T>)はTypeScriptで意味がありますか?

簡単にするために、私はこのタイプを残りの質問では「オプションタイプ」と呼んでいます。 'オプション'は、明らかに、タイプ注釈の提供がオプションである状況を記述するために使用されます。

私は次のことについて不思議です:オプションタイプはTypeScriptのような言語で意味がありますか? Option型の利点は他の言語では確信しており、TypeScriptでプログラミングするときに型が見当たらないことがわかります。

基本的に、タイプシステムでは、Option値の範囲内にある可能性のある値を明示的にすべて解除するよう強制されます。はい、活字体の厳格なヌル・チェックは例えばただしなど、オプションの種類はあなたmap(f: T -> U): Option<U>mapOr(f: T -> U, or: U): Option<U>方法を提供することにより、潜在的なNone値を処理するために(私の意見では)非常に良くな方法を提供していますでの作業

、ということをも達成することができます、私は次のコードのようなものが働きたい:

interface Foo { 
    member: Option<string> 
} 
const opt: Option<Foo> = // ... some initialization 
const memberLength: number = opt 
    .map(x => x.member) // None if x is None, else Some(...) 
    .map(x => x.length) // None if x.member is None, else Some(x.length) 
    .unwrapOrElse(() => 0); 

これはもちろん、オプションのタイプを使用すると、ビットの上に、設計されて非常に簡単な例です。しかし、それは基本的なアイデアを与えるはずです。

私は現在、これが悪い考えである理由は見当たりませんが、誰もそれを実装していないように見えます。これはパフォーマンスに重大な影響を与えますか?あるいは、私が見ることができない、これが実行不可能な他の問題はありますか?

注:私は(主に)これを実装する方法を尋ねているわけではありませんが(これも興味深いトピックですが、私はそれについて考えています)。私の主な関心事は、誰もまだこのようなものを使用しているように見えない理由を見つけることです。

+0

それは素晴らしいディスカッションのテーマですが、ディスカッションは意見に基づいているので、そういう会話を保持するフォーラムではありません。 :) – toskv

+0

あなたが言及した関数 'map'は' map (val:T | null | undefined、f:T→U):U | null | undefined'のように定義でき、実装は簡単です。 'mapOr'と同様に' T | null | undefined'の別名を 'Option 'とすることもできます。 – niceman

+0

これらの言語がこれらの型を持つ理由は、それらが共用体型ではなくタグ付き共用体であるためです) – niceman

答えて

2

私はそれはScalaの(およびいくつかのハスケル)から欠落していたので、私は自分のことのためのlib(とカップル他を)作っ:MM(MITライセンス)

など、ハッキング気軽にフォーク... ;それはMITのライセンスを受けています

関連する問題