코드는 다음과 같습니다
const foo = (foo: string) => {
const result = []
result.push(foo)
}
다음 TS 오류가 발생합니다.
[ts] ‘string’유형의 인수는 ‘never’유형의 매개 변수에 지정할 수 없습니다.
내가 뭘 잘못하고 있죠? 이것이 버그입니까?
답변
result
다음과 같이 문자열 배열로 정의 하면됩니다.
const result : string[] = [];
배열 유형을 정의하지 않으면 기본적으로입니다 never
. 따라서 문자열을 추가하려고 할 때 유형이 일치하지 않아서 오류가 발생했습니다.
답변
다른 방법은 다음과 같습니다.
const result = [] as any;
답변
이것은 최근 회귀 또는 타이프 스크립트의 이상한 동작 인 것 같습니다. 코드가있는 경우 :
const result = []
일반적으로 다음과 같이 쓴 것처럼 취급됩니다.
const result:any[] = []
그러나 tsconfig에 noImplicitAny
FALSE 와 strictNullChecks
TRUE 가 모두 있으면 다음 과 같이 처리됩니다.
const result:never[] = []
이 동작은 모든 논리 IMHO를 무시합니다. null 검사를 켜면 배열의 항목 유형이 변경됩니까 ?? 그런 다음 noImplicitAny
실제로 켜면 any
경고없이 사용이 복원됩니다 ??
의 배열이 any
있으면 추가 코드로 표시하지 않아도됩니다.
답변
ReactJs Hook useState 를 사용하는 동안 ReactJS statless 함수에서
동일한 오류가 발생 했습니다 . 객체 배열의 상태를 설정하고 싶었으므로 다음과 같은 방법을 사용하면
const [items , setItems] = useState([]);
다음과 같이 상태를 업데이트하십시오.
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
오류가 발생했습니다 :
‘{id : number; text : any} ‘는’never ‘유형의 매개 변수에 지정할 수 없습니다.
하지만 이렇게하면
const [items , setItems] = useState([{}]);
오류는 사라졌지 만 0 인덱스에 데이터가없는 항목 이 있습니다 (원치 않는).
그래서 내가 찾은 해결책은 다음과 같습니다.
const [items , setItems] = useState([] as any);
답변
ReactJS useState 후크를 사용하여 ReactJS 함수 구성 요소에서 동일한 오류가 발생했습니다. 해결책은 초기화시 useState 유형을 선언하는 것이 었습니다.
const [items , setItems] = useState<IItem[]>([]); // replace IItem[] with your own typing: string, boolean...
답변
빈 대괄호 대신 Array 키워드를 사용 하여이 문제를 해결할 수있었습니다.
const enhancers: Array<any> = [];
사용하다:
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension())
}
답변
result
string 형 배열 을 입력해야 합니다 const result: string[] = [];
.
