Как я мог бы избежать использования имени свойства объекта вместе с ключевым словом this в TypeScript?

#typescript #object #properties #this #object-literal

#typescript #объект #свойства #это #объект-литерал

Вопрос:

Как я мог бы избежать использования имени свойства объекта вместе с ключевым словом this в TypeScript?

Например. Я могу написать:

 const foo = 2;
const bar = 3;
const baz = { foo, bar };
  

Но я не могу сделать следующее:

 class A {
    foo: number = 2;
    bar: number = 3;
    f() {
        const baz = { this.foo, this.bar };
    }
}
  

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

1. Я думаю, вы могли бы сначала сделать const { foo, bar } = this; , но почему не просто const baz = { foo: this.foo, bar: this.bar } ?

2. @jonrsharpe, я просто хочу использовать более краткую версию. 🙂

Ответ №1:

Если вы действительно не хотите повторения вообще, вы можете написать вспомогательный метод самостоятельно:

 class A {
    foo: number = 2;
    bar: number = 3;
    f() {
        const baz = select(this, "foo", "bar")
    }
}

function select<T, K extends keyof T>(obj: T, ...props: Array<K>): Pick<T, K> {
    const copy = {} as Pick<T, K>;
    props.forEach(p => copy[p] = obj[p])
    return copy
}