DEV Community

Discussion on: TypeScript Might Not Be Your God: Case Study of Migration from TS to JSDoc

Collapse
 
pengeszikra profile image
Peter Vivo

Thx for that image which was clerify to me the jsDoc unite type declaration format which help me to write this one a much more easy format:
Currently I was working on a jsdoc react state handling npm module:
jsdoc-duck

/**
 * @typedef {{ type: "SUMMON", payload: Player[] }} SUMMON
 * @typedef {{ type: "DECK", payload: [string, string][] }} DECK
 * @typedef {{ type: "NEW_GAME", payload: Player }} NEW_GAME - dealer
 * @typedef {{ type: "BLINDS", payload: number | string }} BLINDS - blinds name or index
 * @typedef {{ type: "DEALING", payload:  null }} DEALING
 * @typedef {{ type: "PRE_FLOP", payload: string }} PRE_FLOP
 * @typedef {{ type: "FLOP", payload: string }} FLOP
 * @typedef {{ type: "TURN", payload: number }} TURN
 * @typedef {{ type: "RIVER", payload: string }} RIVER
 * @typedef {{ type: "SHOWDOWN", payload: string }} SHOWDOWN
 * @typedef {{ type: "CALL", payload: string }} CALL
 * @typedef {{ type: "RAISE", payload: string }} RAISE
 * @typedef {{ type: "FOLD", payload: string }} FOLD
 * @typedef {{ type: "CHECK", payload: string }} CHECK
 * @typedef {{ type: "NEXT_HAND", payload: string }} NEXT_HAND
 * @typedef {{ type: "ESCAPE", payload: string }} ESCAPE
 * @typedef {{ type: "CHAMPION_ARE", payload: string }} CHAMPION_ARE
 * @typedef {{ type: "CALC_RANK", payload: null }} CALC_RANK
 *
 * @typedef { DECK | SUMMON | NEW_GAME | BLINDS | DEALING | PRE_FLOP | FLOP | TURN | RIVER | SHOWDOWN | CALL | RAISE | FOLD | CHECK | NEXT_HAND | ESCAPE | CHAMPION_ARE | CALC_RANK } ActionsMap
 */
Enter fullscreen mode Exit fullscreen mode

-- convert to ->

/**
 * @typedef {{ type: "SUMMON", payload: Player[] }
 * | { type: "DECK", payload: [string, string][] }
 * | { type: "NEW_GAME", payload: Player }
 * | { type: "BLINDS", payload: number | string }
 * | { type: "DEALING", payload:  null }
 * | { type: "PRE_FLOP", payload: string }
 * | { type: "FLOP", payload: string }
 * | { type: "TURN", payload: number }
 * | { type: "RIVER", payload: string }
 * | { type: "SHOWDOWN", payload: string }
 * | { type: "CALL", payload: string }
 * | { type: "RAISE", payload: string }
 * | { type: "FOLD", payload: string }
 * | { type: "CHECK", payload: string }
 * | { type: "NEXT_HAND", payload: string }
 * | { type: "ESCAPE", payload: string }
 * | { type: "CHAMPION_ARE", payload: string }
 * | { type: "CALC_RANK", payload: null }
 * } ActionsMap
 */
Enter fullscreen mode Exit fullscreen mode