как ссылаться на вложенное поле в объекте в Typescript

#javascript #typescript

Вопрос:

Я хочу написать тип, который генерируется автоматически в зависимости от пользовательских данных

 type CleanPropType = typeof Array | typeof Object | typeof Function | typeof Boolean | typeof String;

type Prop = {
    type: CleanPropType,
    default?:any
}

// define the type of properties for all components

type Props = {
    [name:string]:Prop
}

// define properties for a specific component

let customComponentProps = {
    name:{
        type:String
    }
}

type customComponentGenerator<T extends Props> = {
    [name in keyof T]: ReturnType<T[name].type> // here error. WHY ?
}

// define the type of properties for a specific component
// but here an error occurs when accessing the "type" field 

type customComponent = Partial<customComponentGenerator<typeof customComponentProps>>;

// I need the resulting type to work correctly
let userComponentProps : customComponent = {
    name:'ComponentNameString',
} // ok

let userComponentProps2 : custromComponent = {
    name:false, // must be err
    otherField: 'str' // // must be err
} 
 

основная проблема заключается в том, что я не могу получить доступ к вложенному полю ‘type’, хотя T расширяет Props.
thx

Ссылка

Комментарии:

1. Вы не можете использовать точечный синтаксис .type в выражениях типа TypeScript. Вам нужно будет использовать T[name]["type"]

2. переписано