TypeScript - 유형 'string' 표현식을 사용하여 유형을 인덱싱할 수 없으므로 요소에 암시적으로 'any' 유형이 있습니다.
나는 다음 코드를 가지고 있습니다.
const color = {
red: null,
green: null,
blue: null
};
const newColor = ['red', 'green', 'blue'].filter(e => color[e]);
오류는 아래쪽에 있으며 다음과 같은 오류가 있습니다.
형식 'string' 식을 사용하여 형식 '{red: null; green: null; blue: null; }'을(를) 인덱싱할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다. '{red: null; green: null; blue: null; }' 형식에서 매개 변수가 'string'인 인덱스 서명을 찾을 수 없습니다.
나는 TypeScript 문서에서 모든 곳을 찾아보았지만, 어떻게 해야 수락할 수 있습니까?
당신은 TypeScript에게 이것에 대해 등을 돌리지 말라고 선언할 수 있습니다.
const color : any = {
red: null,
green: null,
blue: null
};
그러나 가능한 경우 강력한 타이핑이 선호됩니다.
const color : { [key: string]: any } = {
red: null,
green: null,
blue: null
};
TypeScript 색인화에 대한 자세한 내용은 다음과 같습니다.
비슷한 질문에 대해 작성자는 사용 사례에 적합한 경우 a를 사용할 것을 제안합니다.
당신이 가지고 있는 문제는 그것이 잘못된 유형이 아니라, TypeScript가 의 유형을 추론하고 있다는 것이다. 종종 그러한 유형의 추론이 바람직한데, 왜냐하면 (컴파일러가 아는 모든 사람들이) 당신이 그것을 밀고 싶어할 수 있기 때문이다. 그러나 이 경우 컴파일러에서 유일한 구성원은 3개의 문자열 리터럴 , 및 .뿐임을 알 수 있습니다. 즉, 최소한 와 같은 유형이 필요합니다.
TS3.4 이상을 사용한다고 가정하면 컴파일러에서 이러한 종류의 유형 추론을 얻는 가장 쉬운 방법은 a를 사용하는 것이다.
const constAssertionTest = ["red", "green", "blue"] as const;
// const constAssertionTest: readonly ["red", "green", "blue"];
는 컴파일러가 배열에서 정확히 세 개의 문자열 리터럴로 구성된 a를 사용자가 설정한 정확한 순서대로 추론하도록 합니다. (심지어) 이 정도면 오류를 해결할 수 있습니다.
const newColor = (['red', 'green', 'blue'] as const).filter(e => color[e]); // okay
좋아, 그게 도움이 되길 바래. 행운을 빕니다.
좋은 답변 감사합니다. 타자 원고를 처음 접했고 첫 번째 장애물을 성공적으로 고쳤습니다.
// in javascript world this is what I used to do.
let values1 = products.reduce((acc, product) => {
acc[product] = 1;
// ^ --> Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
// No index signature with a parameter of type 'string' was found on type '{}'. TS7053
return acc;
}, {})
// in typescript world I needed an extract type specification for 'acc'
let values2 = products.reduce((acc: { [key: string]: number}, product) => {
acc[product] = 1; //No more error
return acc;
}, {})
나는 그것이 오래된 질문이라는 것을 알지만 나는 다른 대답들에 만족하지 않는다. 키워드는 가급적 피하세요!
이 오류가 발생하는 이유와 이 오류를 어떻게 처리해야 하는지 알아보겠습니다.
이유: const나 문자열 배열에 형식이 없습니다.
유형을 상수에 지정하지 않으면 Typescript는 를 기반으로 유형을 추론합니다. 오류는 "이봐요, 추정된 유형의 일부가 아닌 문자열이라도 상관없어요."라고 말합니다. 만약 그것이 추론된 유형에서 알려지지 않은 것과 같다면?
이를 처리하는 세 가지 방법을 추천할 수 있습니다.
1. 가장 간단하지만 "스크립트 스피릿" 솔루션은 아닙니다.
다음과 같이 const 키에 유형을 지정하십시오.
const color: {[key:string]:null} = {
red: null,
green: null,
blue: null
};
음... 그것은 효과가 있지만, 우리는 더 잘할 수 있어요.
2. 타자 치는 길에...
Typescript 컴파일러에게 키워드와 함께 유추된 const를 사용하고 있다고 말합니다.
주어진 예에서, 그것은 다음과 같다:
const colorKeys: (keyof typeof color)[] = ['red', 'green', 'blue'];
const newColor = colorKeys.filter((e) => color[e]);
그래도 조금 더 노력할 수 있겠어요? 다음 점을 보세요.
3. 여기 있습니다: 당신의 물건에 종류를 주세요!
인터페이스(또는 유형으로 필요한 모든 것)를 만들어 사용자의 상수에 제공합니다. 그런 다음 키워드를 사용하여 문자열 배열 유형을 지정합니다.
interface Color {
red:number|null;
green:number|null;
blue:number|null;
}
const color: Color = {
red: null,
green: null,
blue: null
};
const colorKeys: (keyof Color)[] = ['red', 'green', 'blue'];
const newColor = colorKeys.filter((e) => color[e]);
'개발하자' 카테고리의 다른 글
플러터 상태 관리와 플러터 아키텍처 패턴(MVVM, MVC...) 사이에 관계가 있습니까?) (0) | 2022.12.21 |
---|---|
_startDate로 인해 플러터에 지연 초기화 오류가 발생 (0) | 2022.12.21 |
유형 스크립트: 형식 'string' 표현식을 사용하여 형식을 인덱싱할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다. (0) | 2022.12.19 |
Flot의 ChangeNotifier 모델에 비동기식으로 데이터 로드 (0) | 2022.12.18 |
Kubernetes를 설정할 때 포트 6443 연결이 거부되었습니다. (0) | 2022.12.18 |