programing

TypeScript의 자기 참조형

goodcopy 2022. 8. 16. 23:03
반응형

TypeScript의 자기 참조형

현재 Vue.js 앱에 다음과 유사한 개체가 있으며 TypeScript로 포팅하려고 합니다.이 개체의 구조는 Vuex 라이브러리에 의해 지정됩니다.

const getters = {
  allUsers(state) {
    return state.users;
  },
  firstUser(_state, getters) {
    return getters.allUsers()[0]
  }
}

여기서 getter에 적합한 유형을 제공하려면 어떻게 해야 합니까?firstUser?

const getters = {
  allUsers(state: State) {
    return state.users;
  },
  firstUser(_state: State, getters: typeof getters) {
    return getters.allUsers()[0]
  }
}

현재 다음과 같은 오류가 발생합니다.

[ts] 'getters' is referenced directly or indirectly in its own type annotation.

업데이트: @basarat에서 인수 이름을 바꾸면 오류를 제거할 수 있습니다.

const getters = {
  allUsers(state: State) {
    return state.users;
  },
  firstUser(_state: State, theGetters: typeof getters) {
    return theGetters.allUsers()[0]
  }
}

하지만,typeof getters종국에는 이 되다any의 종류보다getters물건.

난 정말 네가 왜 이런걸 필요로 하는지 이해할 수가 없어getters이런 식으로 행동할 수는 있지만, 당신이 뭘 하고 있는지 알고 있다고 가정해 보겠습니다.

이것은 TypeScript 컴파일러의 제한 사항입니다.이것은, 다음의 타입을 인식합니다.getters재귀적이며, 재귀적인 정보를 제공합니다.anytype. 이 문제를 해결하는 유일한 방법은 type 이름을 갖는 것입니다.getters사용하세요.수업은 어때?

class Getters {
  allUsers(state: State) {
    return state.users;
  }
  firstUser(_state: State, theGetters: Getters) {
    return theGetters.allUsers()[0]; // hey, a bug!
  }
}
const getters = new Getters();

이것은 올바르게 입력되어 있습니다.또, 실장시의 버그도 표시됩니다.firstUser(당신이 고친다면, 아마도, 지나칠 때,_state안으로allUsers()).

도움이 됐으면 좋겠다.행운을 빌어요.

[ts] 'getters'는 자체 유형 주석에서 직접 또는 간접적으로 참조됩니다.

범위에는 2개의 게터가 있습니다.파라미터와 변수.하나 바꾸세요.

고정된.

const getters = {
  allUsers(state: State) {
    return state.users;
  },
  firstUser(_state: State, _getters: typeof getters) { // Rename
    return _getters.allUsers()[0]
  }
}

다른 오류도 있지만 이 오류는 도움을 요청하는 오류입니다.

언급URL : https://stackoverflow.com/questions/45579584/self-referential-type-in-typescript

반응형