我是打字稿的新手,在這里我一直在將 ts 添加到我的反應專案中,我收到了這種錯誤:“字串”.ts(2339) 型別上不存在屬性“識別符號”,代碼按原樣作業,但是添加 ts 時,它會出現該錯誤,我可以這樣解決它: currentBroker: "" as any,但這不是正確的方法。任何幫助/建議?
我的代碼:
const initialSelectionState = {
currentBroker: "",
};
export function selectionReducer(
state = initialSelectionState,
action: selectionReducerAction
) {
switch (action.type) {
case ActionType.CHANGE_SITE:
return {
...state,
currentSite: action.payload,
};
case ActionType.CHANGE_CAMERA:
return {
...state,
currentCamera: action.payload,
};
case ActionType.CHANGE_ANALYSER:
return {
...state,
currentAnalyser: action.payload,
};
case ActionType.CHANGE_PLATFORM:
return {
...state,
currentPlatform: action.payload,
};
case ActionType.CHANGE_BROKER:
return {
...state,
currentBroker: action.payload,
};
case ActionType.CLEAR_ANALYSER_DATA:
return {
...state,
currentAnalyser: "",
};
case ActionType.CLEAR_CAMERA_DATA:
return {
...state,
currentCamera: "",
};
case ActionType.CLEAR_PLATFORM_DATA:
return {
...state,
currentPlatform: "",
};
case ActionType.CLEAR_BROKER_DATA:
return {
...state,
currentBroker: "",
};
case ActionType.UPDATE_BROKER:
const ucurrentBroker =
state.currentBroker.identifier == action.payload.identifier
? action.payload
: state.currentBroker;
return { ...state, currentBroker: ucurrentBroker };
}
}
uj5u.com熱心網友回復:
currentBroker 是字串型別,它不是物件,并且打字稿會告訴您無法訪問屬性,因為它沒有屬性。
如果您使用的是打字稿,我建議您首先宣告您的狀態介面:
interface IState {
currentBroker: string;
}
const initialSelectionState: IState = {
currentBroker: "",
};
并且您需要您的經紀人擁有一個identifier屬性,您可以根據需要修改狀態介面:
interface IState {
currentBroker: {
identifier: string;
}
}
const initialSelectionState: IState = {
currentBroker: {
identifier: ""
};
};
有了這個,你不應該再有錯誤(如果我理解正確的話)
uj5u.com熱心網友回復:
您將“currentBroker”初始化為字串。
const initialSelectionState = {
currentBroker: "",
};
然后稍后嘗試訪問 currentBroker 就好像它是一個具有屬性的物件 identifier
state.currentBroker.identifier == action.payload.identifier
強制轉換為 any 將允許代碼運行,并且很可能undefined在嘗試獲取該屬性時回傳。
如果您要做的只是更新狀態物件中的字串,那么肯定不需要邏輯嗎?
const initialSelectionState = {
currentBroker: "",
};
export function selectionReducer(
state = initialSelectionState,
action: selectionReducerAction
) {
switch (action.type) {
case ActionType.UPDATE_BROKER:
return { ...state, currentBroker: action.payload};
}
}
既然你提到了有效載荷的結構如下;
{
identifier: 'b9b6381e-2d42-4953-b747-4b25fd382a04',
name: 'Broker 244',
host: 'localhost',
port: 1783,
site_id: '0-0-0-0'
}
那么你currentBroker應該以某種方式匹配 this 的結構。或者,如果“最初沒有當前經紀人”,您應該將其設為undefined。在任何一種情況下,它絕對不應該是一個空字串,即""因為這是一種完全不同的資料型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/338448.html
標籤:javascript 反应 打字稿 功能 redux-工具包
