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
재귀적이며, 재귀적인 정보를 제공합니다.any
type. 이 문제를 해결하는 유일한 방법은 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
'programing' 카테고리의 다른 글
"number of bytes"를 0으로 설정하고 memcpy()와 memmove()를 호출할 수 있습니까? (0) | 2022.08.16 |
---|---|
Where to get "UTF-8" string literal in Java? (0) | 2022.08.16 |
VueJS/Vuex 초기 상태 (0) | 2022.08.16 |
vue-cli로 생성된 기존 vuejs 앱을 대규모 프로젝트에 통합하는 방법 (0) | 2022.08.16 |
때 제거된다 어떻게 뷰에서 목록 항목을 움직이기에. (0) | 2022.08.16 |