itsource

'속성이 '없음' 유형에 없습니다.'

mycopycode 2023. 3. 13. 20:28
반응형

'속성이 '없음' 유형에 없습니다.'

이것은 #40796374와 비슷하지만 인터페이스를 사용하고 있는 동안 타입에 관한 것입니다.

아래 코드 지정:

interface Foo {
  name: string;
}

function go() {
  let instance: Foo | null = null;
  let mutator = () => {
   instance = {
     name: 'string'
   };  
  };

  mutator();

  if (instance == null) {
   console.log('Instance is null or undefined');
  } else {
   console.log(instance.name);
  }
}

never 유형에 Property 'name'이 존재하지 않습니다.라는 오류가 발생하였습니다.

나는 어떻게 인스턴스가 '절대'가 될 수 있는지 이해할 수 없다.누가 좀 밝혀줄 수 있어요?

컴포넌트를 반응으로 쓰면 됩니다.FC 및 useState()를 사용하여

이렇게 쓰면 도움이 될 것 같아요.

const [arr, setArr] = useState<any[]>([])

같은 에러가 발생하여 점 표기법을 괄호 표기법으로 대체하여 억제했습니다.

예:

obj.name -> obj['name']

「 」를 에,instance로로 합니다.null. 이 될 수 null은 절대 하지 않는 하고 있습니다.instance합니다.never다른 블록에 있습니다.

null기타 방법으로 입수할 수 있습니다(예:let instance: Foo | null = getFoo(); ,, 음, 다, 다, 다, 다 ) 。instance 되다null 내 및 if 블록 내Foo하다

문서 입력 안 함:https://www.typescriptlang.org/docs/handbook/basic-types.html#never

편집:

업데이트된 예제의 문제는 실제로 컴파일러에서 해결되지 않은 문제입니다.참조:

https://github.com/Microsoft/TypeScript/issues/11498 https://github.com/Microsoft/TypeScript/issues/12176

이는 이 문제와 유사한 것으로 보입니다.이 문제의 중복으로 콜백 내의 값을 변경할 때 "Property does not existing on type "never" 가 잘못되어 있습니다.제어 흐름 분석의 트레이드오프.

그 논의는 꽤 길기 때문에, 적절한 솔루션을 찾을 수 없는 경우는, 다음과 같이 시험해 볼 수 있습니다.

if (instance == null) {
    console.log('Instance is null or undefined');
} else {
    console.log(instance!.name); // ok now
}

저 같은 경우에는 어레이를 시작할 때요.사용:

selectedActors: any = [];

그래서 처음에는 '다이나믹'하게 만들죠.

「키핑」을 해 .any ★★★★★★★★★★★★★★★★★」any[]과 같은

getOptionLabel={(option: any) => option!.name}
 <Autocomplete
    options={tests}
    getOptionLabel={(option: any) => option!.name}
    ....
  />

다음 코드가 작동합니다.

const [disc, setDisc] = useState<any[]>([]);

지금까지 제가 본 것은 다음과 같습니다.useState()에 전달할 유형을 지정하지 않으면 type never가 됩니다.any[]를 사용하면 요청 시 데이터를 전달할 수 있습니다.

리액트를 useRef을 걸다TypeScript를 사용하는 「」를 사용합니다.any을 사용하다

const ref = useRef<HTMLInputElement>(null);

타이프 스크립트 개발자의 경우...React.useRef() 훅을 사용하는 경우 null을 미리 할당하는 대신 변수 유형 any를 선언하고 사용합니다.

예:

const initialRef: any = null;
const ref = React.useRef(initialRef);

component.ts 파일에서 어레이를 다음과 같이 선언합니다.

public arrayName = ([] as any[]);

앵글을 위해 저와 함께 일했던

변수의 유형을 정의하는 것을 잊어버렸을 때 이 문제가 발생했습니다.

제 경우(타자기본을 사용하고 있습니다) 나중에 데이터가 할당되는 가짜 데이터로 응답을 시뮬레이션하려고 했습니다.첫 번째 시도는 다음과 같습니다.

let response = {status: 200, data: []};

그리고 나중에 가짜 데이터를 할당하면 "never []"를 입력할 수 없다고 불평하기 시작합니다.그리고 나는 다음과 같이 반응을 정의했고 그것은 그것을 받아들였다.

let dataArr: MyClass[] = [];
let response = {status: 200, data: dataArr};

가짜 데이터 할당:

response.data = fakeData;

유형을 선언하지 않은 경우 useState:

type이 never라고 가정하고 있기 때문에, 「property does not exist on type 'never'」라고 하는 에러가 표시됩니다.

다음과 같이 입력할 수 있습니다.

const [datalist, setDataList] = useState<Array<Object>>([]);

제 경우 변수를 입력하지 않았기 때문에 발생한 것입니다.

그래서 검색 인터페이스를 만들었습니다.

export interface Search {
  term: string;
  ...
}

나는 그것을 바꿨다

searchList = [];

그 때문에 효과가 있었다

searchList: Search[];

나는 ?와 문제가 있었다!

이 작품은 나에게 효과가 있었다.

if (ref != null){
    if (ref.current != null)
        ref.current.appendChild(child);
}

나는 다음과 같은 표현으로 이 문제를 발견했다.

const node = item ? <a href={item.link}>{item.name}</a> : item.name

그리고 나머지 부분은item.name말했습니다Property 'name' does not exist on type 'never'.

음, 이것은 만약 안에 아무것도 없다면itemobject - a가 있을 수 없습니다.name재산도 마찬가지입니다.

따라서 이 경고는 기본적으로 불가능한 것을 선언할 때 발생합니다(그래서 이 경고는never)

처음에는 값이 비어 있을 수 있습니다.이 경우 예를 들어 보겠습니다.

val = data.notificationId --> 여기서 오류가 발생합니다.따라서 let val = data & data. notification 이라고 간단히 쓸 수 있습니다.아이디

이 방법으로 UseState를 사용하면 문제가 없습니다.

const [data, setData] = useState<any>([]);

Javascript의 경우 기본적으로 모든 데이터 유형이 Any이므로 직접 작동하며, Typescript에는 해당되지 않으므로 언어를 알려야 합니다.

다음과 같이 입력할 수 있습니다.

const [data, setData] = useState <Array>([]);

언급URL : https://stackoverflow.com/questions/44147937/property-does-not-exist-on-type-never

반응형