TS2339:redux类型绑定的TypeScript错误
我是TypeScript新手,尝试创建键入的redux reducer时出错TS2339:redux类型绑定的TypeScript错误,typescript,redux,Typescript,Redux,我是TypeScript新手,尝试创建键入的redux reducer时出错TS2339。错误显示: 我使用typescript管道操作符是否有问题?谢谢 sampleActionTypes.ts: export interface Data { allIds?: number[]; byId?: object; } interface IncrementCount { type: string; } interface ReceiveData { type: string
TS2339
。错误显示:
我使用typescript管道操作符是否有问题?谢谢
sampleActionTypes.ts:
export interface Data {
allIds?: number[];
byId?: object;
}
interface IncrementCount {
type: string;
}
interface ReceiveData {
type: string;
data: Data;
}
export type SampleActionTypes = ReceiveData | IncrementCount;
export interface SampleState {
count: number;
data: Data;
}
const initialState = {
count: 0,
data: {},
};
const sample = (state = initialState, action: SampleActionTypes): SampleState => {
switch (action.type) {
case 'INCREMENT_COUNT': {
const newCount = state.count + 1;
return {
...state,
count: newCount,
};
}
case 'RECEIVE_DATA':
return {
...state,
data: action.data, // error is here
};
default:
return state;
}
};
export default sample;
sampleEducer.ts:
export interface Data {
allIds?: number[];
byId?: object;
}
interface IncrementCount {
type: string;
}
interface ReceiveData {
type: string;
data: Data;
}
export type SampleActionTypes = ReceiveData | IncrementCount;
export interface SampleState {
count: number;
data: Data;
}
const initialState = {
count: 0,
data: {},
};
const sample = (state = initialState, action: SampleActionTypes): SampleState => {
switch (action.type) {
case 'INCREMENT_COUNT': {
const newCount = state.count + 1;
return {
...state,
count: newCount,
};
}
case 'RECEIVE_DATA':
return {
...state,
data: action.data, // error is here
};
default:
return state;
}
};
export default sample;
IncrementCount
类型上不存在data
属性
你可以
a) 类型断言
(action as ReceiveData).data
b) “品牌”类型(我不知道这是否是100%正确的术语)编辑:正确的术语是“歧视联盟”
TS应该能够通过duck键入来计算出其余的内容
c) 类型防护装置
function isReceiveDataAction(x: any): x is ReceiveData {
return x.type === 'RECEIVE_DATA'
}
function isIncrementAction(x: any): x is IncrementData {
...
}
if (isIncrementAction(action)) {
// action is IncrementData
} else if (isReceiveDataAction(action)) {
// action is ReceieveData
}
IncrementCount
类型上不存在data
属性
你可以
a) 类型断言
(action as ReceiveData).data
b) “品牌”类型(我不知道这是否是100%正确的术语)编辑:正确的术语是“歧视联盟”
TS应该能够通过duck键入来计算出其余的内容
c) 类型防护装置
function isReceiveDataAction(x: any): x is ReceiveData {
return x.type === 'RECEIVE_DATA'
}
function isIncrementAction(x: any): x is IncrementData {
...
}
if (isIncrementAction(action)) {
// action is IncrementData
} else if (isReceiveDataAction(action)) {
// action is ReceieveData
}
歧视性工会文档是您所寻找的,因为它为您提供免费的类型保护。歧视性工会文档是您所寻找的,因为它为您提供免费的类型保护