답변:
result다음과 같이 문자열 배열로 정의 하면됩니다.
const result : string[] = [];
배열 유형을 정의하지 않으면 기본적으로입니다 never. 따라서 문자열을 추가하려고 할 때 유형이 일치하지 않아서 오류가 발생했습니다.
nevers 배열 이 유용 할 유스 케이스를 생각할 수 없기 때문에 전적으로 동의 합니다. 그러나 그것을 조사하는 동안 나는 훌륭한 정보를 가진 이 대답 을 발견했습니다 .
let x;) 를 선언하면 any기본적 으로 유형 입니다. 아닙니다 never.
any[]. never[]그것이 쓸모 없게 만드는 것이 놀랐습니다 . 직관적이지 않습니다. 답변 해주셔서 감사합니다. 편집 : 문법
다른 방법은 다음과 같습니다.
const result = [] as any;
anyTypeScript 기능을 해제하기 때문에 실제로 사용하는 것은 좋지 않습니다. 해결 방법이며 다양한 버그로 이어질 수 있습니다.
이것은 최근 회귀 또는 타이프 스크립트의 이상한 동작 인 것 같습니다. 코드가있는 경우 :
const result = []
일반적으로 다음과 같이 쓴 것처럼 취급됩니다.
const result:any[] = []
그러나 tsconfig에 noImplicitAnyFALSE 와 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);
내가 찾은 해결책은
const [files, setFiles] = useState([] as any);
never[]입니까? "항상 비어있는 배열"을 제외하고는 그 용도가 있습니까?