typescript在什麼情況下適合使用函式過載,什麼時候使用泛型呢?

時間 2022-01-11 01:38:59

1樓:吳浩亮

函式簽名的變形和引數個數有關的話,你可能就需要用到函式過載來過載函式簽名了。

泛型本身和函式過載無關,只是一種抽象型別的方式。

另外就是 ts 的過載和其他靜態語言的過載是兩碼事,它是 ts 用來推斷函式簽名的一種方式,所以可以和泛型一起配合使用,如果你用過 rxjs,會發現有很多這種型別宣告。

2樓:

不要寫過載

js裡沒有過載,你還是得自己去判斷

go也沒有過載

過載最好就是引數個數變化,而不是型別變化

而引數個數變化了,最好就是直接改個名字

3樓:Hugo

這個可能性可多了去了,說到底,語言並不關心你怎麼玩。

比如你可以使用函式過載來模擬乞丐版的裝飾器一些能力(理論上,你在函式上面寫的 @語法能做的事兒,都能通過函式過載做,當然,函式過載要改的東西要多一點。),比如通過入參的 type 來控制乙個函式內部的行為。

這時候,你可以在更高的層面用范型來自動的解你的入參和出參。同一級因為有函式過載的機制,本身就可以以入參知道出餐,但是把這個 class 當成個整體看待的時候,難免需要做一些范型 Helper。

因為函式過載,實際上比范型的適用範圍要窄,幾乎,你只能是在能函式簽名上下做文章,(當然,這麼說也不對,因為 TS 的所有東西都能函式化,也就是你其實可以使用函式過載做幾乎任何事)。如果你沒有擴充套件你的函式的定義,即,函式,就是指的乙個類的方法,或者乙個通用的方法,那麼,函式過載本身,可以簡化泛型,個人認為,函式過載要更容易維護,自己寫的複雜范型,時間久了,也可能看不懂了。

實際上,正交著使用,多少有點刻意為之,即如果你所有的函式都用函式過載來區分不同的用途,那麼基本就不用范型做這個事兒了。

class

A) 只要你想,兩者能做的事可以差不多

method(a

:):return1

method(a

:):return2

method(a

:|)}

但是實際上,這一點,可以是上一點的延伸,因為用函式過載寫太多,也不好看,有興趣可以看看 ramda 的 dts 檔案。所以結合兩者,可以寫出非常複雜的函式。這一點,一般更多是乙個函式的行為本身就非常複雜,而且沒法拆分,而且用現有的范型機制可能也不好寫。

如果你不是做乙個大家都用的庫,你就考慮幾種情況,實際上函式過載能寫的快很多。

// pipe

// pipe

// 假設你只寫兩種情況的 pipe。這個例子不好,只是為了說明意思。

function pipe(a,b)

其實寫到這裡,我細細想了想,其實更多的情況,並不是兩者衝突的,更多的還是結合的情況。單看這個問題,似乎是什麼時候過載,什麼時候泛型。但是實際情況裡,你在解乙個問題的時候,肯定是當時怎麼最快,最簡單能解決,就解決了,從這個層面,過載和范型結合使用才是常態。

4樓:NaN

關於題主舉的例子:

如果返回值型別相同的話,直接寫

function test(a: number, b: string | number)

在題主給的這種情況下,泛型和過載有什麼好處呢?

function test(a: number, b: T): T

或者function test(a: number, b: T): T extends string ? number : string

---但是如果泛型會導致必須通過dependent type才能在函式實現中進行正確的自動型別推斷,或者用泛型寫不出來,那麼這種情況可以考慮過載,因為ts不支援dependent type,否則優先泛型。

但是講道理任何可以考慮過載的場合都推薦優先考慮是否拆分成多個不同名函式,不然型別系統太磨人了。

function foo(x: number): string

function foo(x: string): number

function foo(x: any): any

所以說用過載等於放棄型別檢查。要麼說ts才是弱型別語言呢,這麼好的型別系統和這麼爛的型別推斷和檢查簡直是絕配。

其實我是覺得,ts如果能允許放棄js相容性,比如允許基於名稱修飾的過載。。。

副詞在什麼情況下屬片語成分,什麼情況下屬句子成分?

arco 如果副詞是片語 比如名詞片語或者形容詞片語 的乙個部分,它的位置相對固定,比如 That was acarefullyprepared meal.這句話當中的carefully屬於名詞短語a carefully prepared meal的乙個部分,位置也相對固定。如果副詞做句子成分也就是...

在什麼情況下需要變通?

雷雨 認真讀讀,很有內涵 問題回答的本身應該針對社會發展和人為歷史角度。舉個例子,為什麼喝水,因為水普遍了且乾淨,環境包裹,人類文化依靠自然與自然發展為一體。其次才是正常選擇等等等 光說優惠不會喝生水啊 變通本身作用在於可遇見的未來角度對你不利不能有足夠的理由支撐你的繼續,還有就是更好的選擇在你的心...

在coco都可工作是什麼情況?

拾七 我現在就是在coco工作,我的督導直接跟我說我們領導想搞下屬很容易的,反正就是打著為我好的名義,把我的生活奚落個遍,說我難不成以後靠男人什麼的,說比我努力的一大堆,說比我好看的也多,反正吧啦吧啦一大堆吧,我不否認他講的是事實,但是我覺得這不是乙個領導該對乙個下屬說的,還有coco裡面的人其實很...