我正在尝试在redux应用程序中为我的动作创建者实现一个标记的联合类型模式。ts编译没有问题,但是我的IDE,
Visual Studio Code 1.26.1
给了我一个错误。
[ts]类型'boolean |{open:boolean;}'不能赋值给类型'boolean'。
右下角报告的typescript版本是
Typescript 3.0
这是我在项目中使用的版本。如果我正确地理解了typescript,它应该根据我的类型值进行区分,并正确地推断出我的负载将是什么类型。同样,这似乎是从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
}
}
行动/索引.ts
import { PasswordAction, openPassword, closePassword } from './password';
export type Action = PasswordAction;
export default {
openPassword,
closePassword,
};
行动/密码.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},
});
免责声明