Использование Omit или выбрать в Typescript (+ React), но поле все еще там - PullRequest
0 голосов
/ 24 апреля 2020

Issue

Если у меня есть type Foo={'a':string,'b':string}, когда я использую Pick<Foo,'a'> или Omit<Foo,'b'>, поле b все еще присутствует в результирующем объекте (см. MWE ниже).

Context

Я хочу уменьшить тип Props в Typescript + React, чтобы сохранить только те данные, которые я хочу отобразить в компоненте Table-UI Table. Точнее, MUI-Datatables , который построен на компоненте Table в Material-UI. Я думаю, что имеет смысл хранить только те данные, которые мне нужны. Это также необходимо из-за того, как установлены реквизиты MUIDatable.

MWE

Для этого я использую Pick<Foo,'a'> За исключением того, что другие поля все еще присутствуют.

Вот MWE.

    type Foo = {
        a: string
        b: string
    }

    type Bar = Pick<Foo, 'a'>

    const foo: Foo = { a: 'first', b: 'second' }
    const bar: Bar = foo as Bar
    console.log(bar)

Playground Link

Так что мой bar = foo as Bar или <Bar>foo по-прежнему равен {a: 'first', b:'second'} в то время как я ожидал, что будет выбран только a.

Я не понимаю, почему. Я новичок в машинописи, я использовал это как ресурс, чтобы выбрать это решение: https://www.typescriptlang.org/docs/handbook/utility-types.html#picktk

Вопросы

  • Почему это не работает?
  • Как удалить или сохранить только некоторые поля в типизированном шрифте?

1 Ответ

0 голосов
/ 26 апреля 2020

Как сказал Алексей Л. в комментариях, причина, по которой это не работает, заключается в том, что машинописные наборы стираются во время компиляции и ничего не влияют во время выполнения.

Они не изменяют значения, в отличие от приведения во время выполнения на других языках.

Следовательно, мне нужно изменить значение foo, чтобы получить bar, который я хочу.

...