이안리
157
2021-03-26 11:58:07
4
138

타입스크립트 TS2322 오류 질문드립니다ㅠ


ActionTypes.ts

export const API_SUCCESS = 'API_SUCCESS'
export const API_FAIL = 'API_FAIL'

export type CatType = {
    url: string
}

export interface apiFailDispatch {
    type: typeof API_FAIL
}

export interface apiSuccessDispatch {
    type: typeof API_SUCCESS
    payload: {
        url: CatType
    }
}

export type CatDispatchType = apiFailDispatch | apiSuccessDispatch

위와 같이 CatType에서 url을 string으로 타입을 주었습니다.


ApiReducers.ts

import { API_FAIL, API_SUCCESS, CatType, CatDispatchType } from "../actions/ApiActionTypes";

interface InitialState {
    success: boolean
    cat?: CatType
}

const initialState: InitialState = {
    success: false
}

const ApiReducer = (state = initialState, action: CatDispatchType) : InitialState => {
    switch (action.type) {
        case API_FAIL:
            return {
                ...state,
                success:false
            }
        case API_SUCCESS:
            const {url} = action.payload
            return {
                ...state,
                success:true,
                cat: {
                    url
                }
            }
        default:
            return state;
    }
}

export default ApiReducer


그리고 API_SUCCESS되면 url을 불러오려고 하는데요!


TypeScript error in C:/Users/src/reducers/ApiReducers.ts(25,21):

Type 'CatType' is not assignable to type 'string'.  TS2322

    23 |                 success:true,

    24 |                 cat: {

  > 25 |                     url

       |                     ^

    26 |                 }

    27 |             }

    28 |         default:


위와 같이 오류가 나옵니다..ㅠㅠ string으로 주었는데 왜 오류가 뜨는걸까요?

0
  • 답변 4

  • RWB
    718
    2021-03-26 12:12:26

    JSON key-value 객체인데 url이라는 value만 던져주고 있는 것 같습니다.


    cat: {

        url: url

    }


    혹은


    cat: url


    이게 맞을 것 같네요.

  • 이안리
    157
    2021-03-26 13:09:17

    @RWB

    전자로 바꾸면

    Type 'CatType' is not assignable to type 'string'.  TS2322

        23 |                 success:true,

        24 |                 cat: {

      > 25 |                     url: url

           |                     ^

        26 |                 }

        27 |             }

        28 |         default:

    라고 에러가 나네요 여전히..


    후자는 에러는 안나는데 success가 아닌 fail이 되서 값을 못 받아오네요

  • 이안리
    157
    2021-03-26 13:10:43
    export type CatType = {
        url: string
    }
    export type CatType = {
        url: any
    }
    위처럼 수정하니 오류가 사라졌네요. 감사합니다
  • 제관공
    114
    2021-03-26 13:55:21

    payload가

    {

      url: CatType

    }


    인데 이건 결국

    payload = {

      url: {

        url: string

      }

    }


    이런 구조입니다.

    객체가 두번 중첩돼어있으니 굳이 CatType이란걸 정의할 필요가 없겠네요


    그리고 any를 쓰실거면 굳이 타입스크립트를 안쓰셔도 됩니다


  • 로그인을 하시면 답변을 등록할 수 있습니다.