簡體   English   中英

如何在 TypeScript 中表達冪等(自展平)類型?

[英]How to express idempotent (self flatten) types in TypeScript?

有一些具有自展平性質的類型,稱為冪等:

在此處輸入圖片說明

https://en.wikipedia.org/wiki/Idempotence

冪等性是數學和計算機科學中某些運算的屬性,它們可以多次應用而不會改變初始應用后的結果。

在 JavaScript/TypeScript 中,我們有Object/Number 對象作為冪等的實例。

一個真實世界的用例是在 TypeScript 中使用正確的類型編寫自己的 Promise。 你永遠不可能有Promise<Promise<T>>只有Promise<T>因為承諾會自動展平。 例如,monad 也會發生同樣的情況。

 console.log( Number(5) === Number(Number(5)) ); // true

以簡潔的方式,它通常表示為

TTX = TX

我以某種方式設法寫在函數中

const toObject = <A, X>(x: A): A extends T<X> ? A : //...
        ((X:object)=> {/* ... */})(Object(x)) ;

A extends T<X> ? A : //... A extends T<X> ? A : //...在一些函數內部的上下文中起作用,但是我不知道如何單獨編寫類型本身,即使是函數結構,它也很復雜,我覺得有些地方很不對勁。

我想知道和寫的是TypeScript中冪等類型的定義

type T<X> = ???
//where
T<T<X>> === T<X>

你可以圍繞一些內部類型編寫一個冪等的包裝器:

// just for reference, more practically this could be Promise<T>
type InnerType<T> = [T];
type IdempotentWrapper<X> = X extends InnerType<unknown> ? X : InnerType<X>;

type Foo = IdempotentWrapper<number>; // equivalent to InnerType<number>
type Bar = IdempotentWrapper<IdempotentWrapper<number>>; // equivalent to InnerType<number> as well

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM