Репликация TypeScripts как с помощью Flow

В TypeScript я могу сделать что-то вроде этого

interface LoginInterface {
  username: string;
  password: string;
}

const MyObject = {
  credentials: null as LoginInterface,
  otherInfo: "I'm something not relevant to this question"
}

В основном я определил интерфейс LoginInterface, затем я создал переменную MyObject, которая является объектом со многими свойствами (в данном случае только двумя), одно из этих свойств credentials должно иметь значение по умолчанию null, но я хочу заявить, что это типа LoginInterface, с TypeScript это очень просто, так как я могу использовать ключевое слово as. Как я мог воспроизвести это с помощью Поток?

Теперь я знаю, что могу сделать что-то подобное

const MyObject: {
  credentials: LoginInterface,
  otherInfo: string
} = {
  credentials: null,
  otherInfo: "I'm something not relevant to this question"
};

Но я не хочу определять тип для MyObject. Я просто хочу определить тип для свойства credentialsMyObject, аналогично тому, как я могу добиться этого в TypeScript?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Flow определенно не допустит этого, потому что это небезопасно. Одна из главных причин использования Flow - предотвращение ошибок нулевого указателя.

Чтобы явно указать, что значение - null, а мог - это LoginInterface, вам нужно сообщить Flow, что значение имеет тип ?LoginInterface, который совпадает с null | LoginInterface.

Если вы действительно не можете сделать это с именованным типом, вы можете сделать это встроенным в:

const MyObject = {
  credentials: (null: ?LoginInterface),
  otherInfo: "I'm something not relevant to this question"
}

Вам нужны круглые скобки, чтобы Flow мог отделить выражения типа от остальных.

Спасибо за быстрый прямой ответ!

Kirkify 25.04.2018 19:14

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