Динамическое построение объекта

#javascript #typescript

Вопрос:

Я хочу динамически создавать объект в typescript / javascript. У меня есть массив reqParam в объекте env, который может выглядеть следующим образом: env = {reqParams : ['fromTime', 'toTime']} и он передается моей инициализирующей функции для динамического построения объекта

const myObject = _initObject(env.reqParams);

Я запустил функцию, но не могу понять, как правильно ввести ключ и значения в новый объект.

 private _initObject(raqParams: any) {
    let requestTemplate = {
      bodyjson : "$util.escapeJavaScript($input.json('

Надеюсь, вы видите, чего я пытаюсь достичь. Например, вот желаемый результат для 2 параметров : от времени и до времени:

       {
        bodyjson : "$util.escapeJavaScript($input.json('


Ответ №1:

1 опечатка и 2 исправления, и это работает, вот так:

 const _initObject = (reqParams) => {
    let requestTemplate = {
      bodyjson : "$util.escapeJavaScript($input.json('


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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:

 reqParams.forEach(param => {
      // build new item
      let templateEntry = `$input.params('${param}')`;
      // Put new item into object
      requestTemplate[param] = templateEntry;
    });
 

использование js ${} для интерполяции строк

 key = 'dynamic'
object[key]  = value
 

даст вам объект {'dynamic':value}

))",
"cognitoUserId": "$context.authorizer.claims.sub",
"cognitoUserEmail": "$context.authorizer.claims.email"
};
reqParams.forEach(param => {
// build new item
let templateEntry = "$input.params('`param`')";
// Put new item into object
requestTemplate[`param`] = templateEntry;
});
}
Надеюсь, вы видите, чего я пытаюсь достичь. Например, вот желаемый результат для 2 параметров : от времени и до времени:


Ответ №1:

1 опечатка и 2 исправления, и это работает, вот так:


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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:


использование js ${} для интерполяции строк


даст вам объект {'dynamic':value}

))",
"fromTime": "$input.params('fromTime')",
"toTime": "$input.params('toTime')",
"cognitoUserId": "$context.authorizer.claims.sub",
"cognitoUserEmail": "$context.authorizer.claims.email"
}

Ответ №1:

1 опечатка и 2 исправления, и это работает, вот так:


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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:


использование js ${} для интерполяции строк


даст вам объект {'dynamic':value}

))",
"cognitoUserId": "$context.authorizer.claims.sub",
"cognitoUserEmail": "$context.authorizer.claims.email"
};
reqParams.forEach(param => {
// build new item
let templateEntry = "$input.params('`param`')";
// Put new item into object
requestTemplate[`param`] = templateEntry;
});
}

Надеюсь, вы видите, чего я пытаюсь достичь. Например, вот желаемый результат для 2 параметров : от времени и до времени:


Ответ №1:

1 опечатка и 2 исправления, и это работает, вот так:


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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:


использование js ${} для интерполяции строк


даст вам объект {'dynamic':value}

))»,
«cognitoUserId»: «$context.authorizer.claims.sub»,
«cognitoUserEmail»: «$context.authorizer.claims.email»
};
reqParams.forEach(param => {
// build new item
let templateEntry = `$input.params(‘${param}’)`;
// Put new item into object
requestTemplate[param] = templateEntry;
});
return requestTemplate;
}

console.log(_initObject([‘fromTime’, ‘toTime’]));

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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:


использование js ${} для интерполяции строк


даст вам объект {'dynamic':value}

))»,
«cognitoUserId»: «$context.authorizer.claims.sub»,
«cognitoUserEmail»: «$context.authorizer.claims.email»
};
reqParams.forEach(param => {
// build new item
let templateEntry = «$input.params(‘`param`’)»;
// Put new item into object
requestTemplate[`param`] = templateEntry;
});
}

Надеюсь, вы видите, чего я пытаюсь достичь. Например, вот желаемый результат для 2 параметров : от времени и до времени:


Ответ №1:

1 опечатка и 2 исправления, и это работает, вот так:


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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:


использование js ${} для интерполяции строк


даст вам объект {'dynamic':value}

))»,
«fromTime»: «$input.params(‘fromTime’)»,
«toTime»: «$input.params(‘toTime’)»,
«cognitoUserId»: «$context.authorizer.claims.sub»,
«cognitoUserEmail»: «$context.authorizer.claims.email»
}

Ответ №1:

1 опечатка и 2 исправления, и это работает, вот так:


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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:


использование js ${} для интерполяции строк


даст вам объект {'dynamic':value}

))»,
«cognitoUserId»: «$context.authorizer.claims.sub»,
«cognitoUserEmail»: «$context.authorizer.claims.email»
};
reqParams.forEach(param => {
// build new item
let templateEntry = «$input.params(‘`param`’)»;
// Put new item into object
requestTemplate[`param`] = templateEntry;
});
}Надеюсь, вы видите, чего я пытаюсь достичь. Например, вот желаемый результат для 2 параметров : от времени и до времени:


Ответ №1:

1 опечатка и 2 исправления, и это работает, вот так:


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

1. Отличная работа! Мы почти на месте!!! Несколько модов с тех пор, как я работаю в typescript. Я должен был написать const _initObject = ((reqParamsArray: string[]) . И все еще есть одна ошибка из-за параметра requestTemplate[param] : Element implicitly has an 'any' type because expression of type 'string' can't be used to index type ... No index signature with a parameter of type 'string' was found on type '{ bodyjson: string; cognitoUserId: string; cognitoUserEmail: string; }'.ts(7053)

2. вы можете попытаться установить ((param: string) => {

3. ДА. Это на самом деле то, что я сделал. Также необходимо использовать let requestTemplate: {[index: string]:any} = { и (reqParamsArray: string[]) => Может быть, вы могли бы отредактировать их в своем ответе?

4. я мог бы, но тогда выход не будет работать

5. Взгляните на это. Дайте мне знать, если это имеет смысл: cutt.ly/5xeLfPs

Ответ №2:


использование js ${} для интерполяции строк


даст вам объект {'dynamic':value}