2017-05-30 29 views
5

Haskell,Rust等語言提供MaybeOption類型。即使在Java中,現在也有一個Optional類型。在TypeScript中,選項或可選類型(選項<T>)是否有意義?

爲了簡單起見,我將在剩下的問題中稱這種類型爲「選項類型」。 '可選類型'顯然經常用於描述提供類型註釋是可選的情況。

我很好奇以下內容:OptionScript類型在TypeScript這樣的語言中有意義嗎? Option類型的優點在其他語言中很有說服力,而且在TypeScript中編程時我發現自己錯過了類型。

基本上,類型系統強制您顯式解開可能位於Option值內的任何值。是的,打字稿嚴格的空檢查也可以實現這一點,但是,與選項類型的工作,爲您提供一個(在我看來)更漂亮的方法來處理潛在None值提供map(f: T -> U): Option<U>mapOr(f: T -> U, or: U): Option<U>方法等

例如我想類似下面的代碼工作:

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

雖然這是一個很好的討論主題,討論將基於意見,因此SO不是舉行這種對話的論壇。 :) – toskv

+0

你提到的函數'map'可以這樣定義:'map (val:T | null | undefined,f:T - > U):U | null | undefined'且實現很簡單,類似於'mapOr',你甚至可以將'T | null | undefined'作爲'Option '我認爲 – niceman

+0

這些語言有這些類型的原因是因爲它們沒有聯合類型,但標記了聯合(是的,這兩個是不同的) – niceman

回答

2

我失蹤它斯卡拉來(和一些Haskell的),所以我做了我自己的lib它(以及一些其他):MM(MIT許可證)

隨意破解,叉等.. ;它是麻省理工學院許可的

相關問題