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

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
編輯:事實上,這可能有點令人困惑的概念;因為冪等從來沒有比 T 多的結構,以 JS 陣列形式[foo]。另一方面,monads 操作(在 Haskel 詞中系結)是 TTX = TX,但它確實具有類似[[foo]].
Array.map 組成是 [[foo]] => [[[foo]]]
Array.flatMap 合成圖 平面(TTX=TX)是 [[foo]] => [[foo]]
這是單子,但不是冪等的,我認為。令人困惑,是的。
我以某種方式設法寫在函式中
const toObject = <A, X>(x: A): A extends T<X> ? A : //...
((X:object)=> {/* ... */})(Object(x)) ;
A extends T<X> ? A : //... 在一些函式內部的背景關系中作業,但是我不知道如何單獨撰寫型別本身,即使是函式結構,它也很復雜,我覺得有些地方很不對勁。
我想知道和寫的是TypeScript中冪等型別的定義
type T<X> = ???
//where
T<T<X>> === T<X>
uj5u.com熱心網友回復:
你可以圍繞一些內部型別撰寫一個冪等的包裝器:
// 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/349963.html
標籤:javascript 打字稿
