ประเภทการส่งคืน TypeScript ของการดำเนินการ Redux

ฉันมีสิ่งนี้ในโค้ดเบส

export const login = (user, pass) => {
  return (dispatch) =>    dispatch({ type: LOGIN });
}

ประเภทการส่งคืนของ login คืออะไร?

ฉันลองสิ่งนี้:

export const login = (user, pass)  : ReducerAction {
  return (dispatch) =>  dispatch({ type: LOGIN });
}

และประเภทนั้นผิดอย่างแน่นอน ประเภทการคืน TS ที่ถูกต้องที่นี่คืออะไร ปัญญาอ่อนยากที่จะหาคำตอบสำหรับสิ่งนี้ทางออนไลน์


person Community    schedule 12.02.2020    source แหล่งที่มา


คำตอบ (2)


การจัดหาอินเทอร์เฟซสำหรับอุปกรณ์ประกอบการจัดส่งการดำเนินการ Redux ของคุณในลักษณะต่อไปนี้ก็เพียงพอแล้ว:

interface DispatchProps {
  login: () => void;
}

จากนั้นคุณสามารถใช้อินเทอร์เฟซด้านบนเพื่อระบุการพิมพ์สำหรับ mapDispatchToProps ของคุณ

const mapDispatchToProps = (dispatch: Dispatch<DispatchProps>) =>
  bindActionCreators({
    login: () => login(),
  }, dispatch);

หากคุณกำลังทำงานกับ react/redux/TypeScript ฉันขอแนะนำคำแนะนำนี้ เนื่องจากมีทรัพยากรมากมาย นอกจากนี้ คุณอาจต้องการติดตั้ง typesafe-actions ซึ่งเป็นรูปแบบหนึ่งของ "ยูทิลิตี้ Typesafe" สำหรับ "ผู้สร้างแอ็คชั่น" ในสถาปัตยกรรม Redux / Flux"

person wentjun    schedule 13.02.2020

ปัญหาคือ Typescript ไม่ทราบประเภทของ dispatch อาจเป็นอะไรก็ได้ เท่าที่ Typescript รู้ว่ามันเป็นเพียงอาร์กิวเมนต์ของฟังก์ชันสุ่มและอาจมีประเภท any คุณต้องประกาศว่าเป็นประเภทที่ถูกต้องและ Typescript จะสามารถอนุมานส่วนที่เหลือได้:

const LOGIN = "LOGIN";

type LoginAction = {
  type: typeof LOGIN
}

const login = (user, pass) => (dispatch: React.Dispatch<LoginAction>) => dispatch({type: 'LOGIN'});

โปรดทราบว่าการดำเนินการเข้าสู่ระบบจะต้องมีประเภทที่ประกาศไว้เช่นกัน เนื่องจากสิ่งนั้นจะถูกส่งผ่านไปยังประเภท React.Dispatch ทั่วไป เพื่อให้ Typescript รู้ว่าประเภทนั้นกำลังจัดส่ง

คุณอาจต้องติดตั้งแพ็คเกจ @types/react-redux เพื่อรับประเภท React.Dispatch ฉันไม่แน่ใจว่ามันมาจากไหนจากด้านบนของหัว

person jered    schedule 13.02.2020