type transferString<T extends String> = T extends `${infer item}-${infer rest}` ?
`${item}${transferString<Capitalize<rest>>}`:T
type test = transferString<'guang-and-dong'>
type arrTransfer<T extends unknown[],V> = T extends [infer first, ...infer rest] ? {
[key in first as key extends keyof any? key : never]: rest extends unknown[] ? arrTransfer<rest,V> : V
} : V
type test2 = arrTransfer<['a','b',undefined],3>
type Copy<Obj extends Record<string, any>> = {
[Key in keyof Obj]:Obj[Key]
}
type PartialObjectPropByKeys<T extends Record<string,any>,P extends keyof any> =
Copy<Partial<Pick<T,keyof T&P>> &Omit<T,P>>
interface Dong {
name: string
age: number
address: string
}
type test3 = PartialObjectPropByKeys<Dong,'name'| 'age'| 'commonAncestorContainer' >
function join (str:string){
return (...args:any)=>{
console.log(args)
}
}
const res = join('-')('guang', 'and', 'dong');
declare function join<T extends string>(t:T) : <Items extends string[]>(...ars:Items) => JoinType<Items,T>
type JoinType<Items extends string[],T extends string,result extends string=''>= [infer item,...args:Items] extends Items
? JoinType<args,T,`${result}${item}${T}`>:
字节面试题

type parate = '-' | '.' | '/'
type FormateDate<T extends string> = T extends `${infer Day}${parate}${infer Month}${parate}${infer Year}` ? `${GenStr<Day>}${parate}${GenStr<Month>}${parate}${GenStr<Year>}`:never;
type Dates = 0 | 1| 2 | 3| 4|5 |6|7|8 |9;
type res = FormateDate<'11-22-2024'>;
const ass: FormateDate<'DD-MM-YY'> ='11-12-2024';
type DayType = `${Dates}${Dates}`
type MonthType = `${Dates}${Dates}`
type DayType1 = `${0 | 1 | 2 |3}${Dates}`
type MonthType1 = `${0|1}${Dates}`;
type YearType = `20${Dates}${Dates}`
type GenStr<Type extends string> =
Type extends 'YY'
? YearType
: Type extends 'MM'
? MonthType1
: DayType1;