Утверждение типа свойства объекта на TypeScript

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

    interface myObject {
       myProperty: customType1|customType2    
    }
    //Now I want to make clear in some other line of code that i know what is
    // The type of that property at that time, somthing like this
    myObject.<customType1>myProperty

Я искал вокруг, но я не могу найти ничего, относящегося к этому делу, возможно ли это вообще?

Он называется тип гвардии и взгляните также на определяемые пользователем охранники типов, они довольно изящны: typescriptlang.org/docs/handbook/…

ippi 05.02.2019 19:27

Кажется, что защита типа запрашивает тип переменной во время выполнения. это правильно?

Joaquin Brandan 05.02.2019 19:30

Кроме того, дискриминированный союз может быть чем-то еще, на что стоит обратить внимание в этом контексте.

Titian Cernicova-Dragomir 05.02.2019 19:31

Спасибо за предложения, но мне нужно сообщить TS, какой тип мне нужен, мне не нужно проверять его во время выполнения, как и утверждение типа. Тип объекта в основном зависит от родительского объекта, а не от самого объекта, поэтому размеченный союз, похоже, здесь не применяется (к сожалению)

Joaquin Brandan 05.02.2019 19:48
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
4
1 319
2

Ответы 2

Кажется, что способ сделать это:

myObject.myProperty = myObject.myProperty as customType1

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

Как упоминалось в документации Typescript, https://www.typescriptlang.org/docs/handbook/advanced-types.html#intersection-types

Сначала утвердите тип родительского свойства, а затем получите доступ к дочернему свойству.

(<customType1>myObject.myProperty)
// or
(myObject.myProperty as customType1)

// if there is any child-property
(myObject.myProperty as customType1)['child_property_of_myproperty'];

Другие вопросы по теме