![](/img/trans.png)
[英]How to fix the broken code with idempotent (self flatten) types in 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.