Skip to content

2024 스터디

Yongku cho edited this page Feb 7, 2024 · 1 revision

수동

export const paths = {
   framework: {
       react: '/framework/react',
       vue: '/framework/vue',
   },
   language: {
       typescript: '/language/typescript',
       javascript: '/language/javascript',
   }  ,
   pattern: {
       mvc: '/pattern/mvc',
       flux: '/pattern/flux',
   }  
};

type PathsType = typeof paths;
type PathsKeys = keyof PathsType;
type PathsInnerKeys = {
    [key in PathsKeys]: keyof PathsType[key]
}[PathsKeys];

재귀적으로 처리

export const paths = {
   framework: {
       react: '/framework/react',
       vue: '/framework/vue',
   },
   language: {
       typescript: '/language/typescript',
       javascript: '/language/javascript',
   }  ,
   pattern: {
       mvc: '/pattern/mvc',
       flux: '/pattern/flux',
   }  
};

type Keys<Type> = {
    [Key in keyof Type]: keyof Type[Key] extends string
        ? keyof Type[Key]
        : Keys<Type[Key]> 
}[keyof Type];

type PathsType = typeof paths;
type PathsInnerKeys = Keys<PathsType>

내부 키 모두 추출하기

export const paths = {
   framework: {
        react: '/framework/react',
        vue: '/framework/vue',
   },
   language: {
        typescript: '/language/typescript',
        javascript: '/language/javascript',
   },
   pattern: {
        flux: '/pattern/flux',
        model_view: {
            mvc: '/pattern/model_view/mvc',
            mvvm: '/pattern/model_view/mvvm',
        }
   }  
};

type Keys<Type> = Type extends string
    ? never
    : keyof Type | Keys<Type[keyof Type]>;

type PathsType = typeof paths;
type PathsKeys = Keys<PathsType>;

재귀적으로 값 추출

export const paths = {
   framework: {
        react: '/framework/react',
        vue: '/framework/vue',
   },
   language: {
        typescript: '/language/typescript',
        javascript: '/language/javascript',
   },
   pattern: {
        flux: '/pattern/flux',
        model_view: {
            mvc: '/pattern/model_view/mvc',
            mvvm: '/pattern/model_view/mvvm',
        }
   }  
} as const;

type Values<Type> = {
    [Key in keyof Type]: Type[Key] extends string
        ? Type[Key]
        : Values<Type[Key]> 
}[keyof Type];

type PathsType = typeof paths;
type PathsValues = Values<PathsType>;
Clone this wiki locally