Ошибки кода Visual Studio в маркированном типе объединения - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь реализовать шаблон типа тега объединения для создателей моих действий в приложении с избыточностью. TS компилируется без проблем, но My IDE Visual Studio Code 1.26.1 выдает ошибку.

[ts] Type 'boolean | {open: boolean; } 'нельзя назначить типу' логический '. Тип '{open: boolean; } 'нельзя присвоить типу' boolean '.

Версия машинописного текста, указанная в правом нижнем углу, - Typescript 3.0 - это версия, которую я использую в своем проекте. Если я правильно понимаю машинопись, она должна различать, основываясь на моём значении типа, и правильно выводить, каким будет тип моей полезной нагрузки. Опять же, похоже, что это работает с точки зрения ts, но раздражает, что vs-код доставляет мне неприятности.

редуктор

import { Action } from '../actions';

interface State {
  open: boolean;
};

const defaultState : State = {
  open: false,
};

export default (state = defaultState, { type, payload } : Action) : State => {
  switch(type) {
    case 'PASSWORD/OPEN':
      return { ...state, open: payload } // ERROR here on open property
  }
}

действия / index.ts

import { PasswordAction, openPassword, closePassword } from './password';
export type Action = PasswordAction;
export default {
  openPassword,
  closePassword,
};

Действия / password.ts

interface OpenAction {
  type: 'PASSWORD/OPEN';
  payload: boolean;
}

interface CloseAction {
  type: 'PASSWORD/CLOSE';
  payload: { open: boolean; };
}

export type PasswordAction = OpenAction | CloseAction;

export const openPassword = () : OpenAction => ({
  type: 'PASSWORD/OPEN',
  payload: true,
});

export const closePassword = () : CloseAction => ({
  type: 'PASSWORD/CLOSE',
  payload: {open: false},
});

Ответственность

Возможно, это не связано непосредственно с программированием и, следовательно, потенциально не по теме. Сначала я собирался опубликовать вопрос на их странице GitHub, но в контрольном списке проблем сказано задавать вопросы здесь. Поскольку я не уверен на 100%, что это ошибка, я решил сначала проверить здесь.

1 Ответ

0 голосов
/ 06 сентября 2018

Для охранников типа, связанных с дискриминационными профсоюзами, вы не можете разрушить профсоюз. Если вы сделаете это, Typescript не сможет отследить, что разрушенные переменные связаны каким-либо образом. Это будет работать:

export default (state = defaultState, a : Action) : State => {
  switch(a.type) {
    case 'PASSWORD/OPEN':
      return { ...state, open: a.payload }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...