Haskell,Rust等語言提供Maybe
或Option
類型。即使在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);
這,當然是一個非常簡單的例子,在使用選項類型是有點過度設計。不過,它應該給出一個基本的想法。
我目前沒有看到爲什麼這是一個壞主意,但似乎沒有人實現它,據我所知。這會對性能產生嚴重影響嗎?還是還有其他問題我看不到這使得這種不可行?
注意:我不是(主要)要求如何實現這一點(雖然這也是一個有趣的話題 - 但我有這方面的想法)。我主要關心的是找出爲什麼沒有人似乎正在使用這樣的東西呢。
雖然這是一個很好的討論主題,討論將基於意見,因此SO不是舉行這種對話的論壇。 :) – toskv
你提到的函數'map'可以這樣定義:'map(val:T | null | undefined,f:T - > U):U | null | undefined'且實現很簡單,類似於'mapOr',你甚至可以將'T | null | undefined'作爲'Option '我認爲 –
niceman
這些語言有這些類型的原因是因爲它們沒有聯合類型,但標記了聯合(是的,這兩個是不同的) – niceman