import { DpcMgr } from "../src" ; interface CtrlKeyTypeMapType { typeTest : "typeTest" ; typeTest2 : "typeTest2" ; } interface InitDataTypeMapType { typeTest : { a : number ; b : number ; } ; typeTest2 : { fjfj : string ; } ; } interface ShowDataTypeMapType { typeTest : { a : number ; b : number ; } ; typeTest2 : { fjfj : string ; } ; } type FunctionPropertyNames < T > = { [ K in keyof T ] : T [ K ] extends ( ... args : any [ ] ) => any ? K : never ; } [ keyof T ] & string ; type MethodParameters < T extends Partial < any > , M extends FunctionPropertyNames < T > > = Parameters < T [ M ] > ; interface IShowConfig2 < InitDataTypeMapType = any , ShowDataTypeMapType = any , TypeKey extends keyof any = any > { typeKey : TypeKey ; /**
     * 透传初始化数据
     */ onInitData ? : InitDataTypeMapType [ ToAnyIndexKey < TypeKey , InitDataTypeMapType > ] ; /**
     * 强制重新加载
     */ forceLoad ? : boolean ; /**
     * 显示数据
     */ onShowData ? : ShowDataTypeMapType [ ToAnyIndexKey < TypeKey , ShowDataTypeMapType > ] ; /**调用就执行 */ showedCb ? : void ; /**显示被取消了 */ onCancel ? : VoidFunction ; } /**
 * 将索引类型转换为任意类型的索引类型
 */ type ToAnyIndexKey < IndexKey , AnyType > = IndexKey extends keyof AnyType ? IndexKey : keyof AnyType ; interface ITestMgr < CtrlKeyMapType = any , InitDataTypeMapType = any , ShowDataTypeMapType = any , UpdateDataTypeMapType = any > { param typeKey param key param lifeCircleData showDpc < T = any , keyType extends keyof CtrlKeyMapType = any > ( showConfig ) : T ; param key param updateData updateDpc ( key , updateData ? ) : void ; param key hideDpc ( key ) : void ; param key param destroyRes param destroyIns destroyDpc ( key , destroyRes ? , destroyIns ? ) : void ; } const mgr = new DpcMgr ( ) as any ; mgr . showDpc ( { typeKey : "typeTest" , onInitData : { a : 1 , b : 1 } , onShowData : { a : 1 , b : 1 } } ) ; const myMgr = { } as any ; myMgr . showDpc ( "typeTest2" ) ; type Whitespace = ' ' | '\n' | '\r' | '\t' ; type TrimStart < S extends string , P extends string = Whitespace > = S extends `${ P }${ infer R }` ? TrimStart < R , P > : S ; type String1 = '\t  \r  \n   value' ; type Trimmed1 = TrimStart < String1 > ; type String2 = '---value' ; type Trimmed2 = TrimStart < String2 , '-' > ; function a ( a ) { } a ( "value" ) ;