摘要:中類型推導部分預期想實現(xiàn)的效果在中對應的類型是對應的類型是對應的類型是但是,我們想要實現(xiàn)的是轉(zhuǎn)換成小寫的所以我們寫個泛型來轉(zhuǎn)換預覽鏈接定義的類型留個泛型是給復雜類型做兼容復雜的類型定義函數(shù)接收的類型最關(guān)鍵的一步根據(jù)輸入的類型計算出來函
rfc 中類型推導部分 Type Inference預期想實現(xiàn)的效果
createComponent({ props: { foo: { type: String, required: true }, bar: { type: Number }, boo: Boolean, options: (null as any) as { msg: string }, requiredOptions: { type: (null as any) as { msg: string }, required: true } } as const, setup(props) { props.foo; // string props.bar; // number | undefined props.boo; // boolean | undefined props.options; // {msg: string } | undefined props.requiredOptions; // {msg: string } } });String -> string 、 Number -> number 、 Boolean -> boolean
在 ts 中
String對應的類型是StringConstructor
Number對應的類型是NumberConstructor
Boolean對應的類型是BooleanConstructor
但是,我們想要實現(xiàn)的是轉(zhuǎn)換成小寫的string | number | boolean
所以我們寫個泛型來轉(zhuǎn)換
type NormalizeType= T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T;
playground 預覽鏈接
定義 prop 的類型type BuiltInType= | StringConstructor | NumberConstructor | BooleanConstructor | T;
留個泛型是給復雜類型做兼容
rfc 復雜的 prop 類型
type DefaultType最關(guān)鍵的一步根據(jù)輸入的props類型計算出來setup函數(shù)接收的形參props類型= { [key: string]: | { type?: BuiltInType ; require?: boolean; } | BuiltInType ; };
type ReflexType組合出來createComponent函數(shù)定義= { [key in keyof T]: T[key] extends { type: infer TYPE; required: true } ? NormalizeType : T[key] extends { type: infer TYPE } ? NormalizeType | undefined : NormalizeType | undefined };
function createComponent完整代碼>(props: { props: T; setup(props: ReflexType ): any; }) {}
type BuiltInType= | StringConstructor | NumberConstructor | BooleanConstructor | T; type NormalizeType = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T; type ReflexType = { [key in keyof T]: T[key] extends { type: infer TYPE; required: true } ? NormalizeType : T[key] extends { type: infer TYPE } ? NormalizeType | undefined : NormalizeType | undefined }; type DefaultType = { [key: string]: { type?: BuiltInType ; require?: boolean } | BuiltInType ; }; function createComponent >(props: { props: T; setup(props: ReflexType ): any; }) {} createComponent({ props: { foo: { type: String, required: true }, bar: { type: Number }, boo: Boolean, options: (null as any) as { msg: string }, requiredOptions: { type: (null as any) as { msg: string }, required: true } } as const, setup(props) { props.foo; props.bar; props.boo; props.options; props.requiredOptions; } });
playground 預覽鏈接
效果圖文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104623.html
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:拿到的都是而不是原始值,且這個值會動態(tài)變化。精讀對于的與,筆者做一些對比。因此采取了作為優(yōu)化方案只有當?shù)诙€依賴參數(shù)變化時才返回新引用。不需要使用等進行性能優(yōu)化,所有性能優(yōu)化都是自動的。前端精讀幫你篩選靠譜的內(nèi)容。 1. 引言 Vue 3.0 的發(fā)布引起了軒然大波,讓我們解讀下它的 function api RFC 詳細了解一下 Vue 團隊是怎么想的吧! 首先官方回答了幾個最受關(guān)注的...
閱讀 526·2023-04-26 00:33
閱讀 3550·2021-11-24 09:39
閱讀 2955·2021-09-22 15:34
閱讀 2328·2019-08-23 18:07
閱讀 2922·2019-08-23 18:04
閱讀 3711·2019-08-23 16:06
閱讀 2903·2019-08-23 15:27
閱讀 1622·2019-08-23 14:32