programing

TypeScript는 생성된 객체를 반환하여 생성자에 대해 "초기화자가 없으며 생성자에 확실히 할당되지 않았습니다"라고 불평합니다.

lastmoon 2023. 7. 16. 17:46
반응형

TypeScript는 생성된 객체를 반환하여 생성자에 대해 "초기화자가 없으며 생성자에 확실히 할당되지 않았습니다"라고 불평합니다.

TypeScript는 이 코드 샘플에 다음 오류 메시지를 표시합니다.

class MyClass {
  someField: boolean;
  constructor() {
    return { someField: true };
  }
}

'someField' 속성에 이니셜라이저가 없으며 생성자에 확실히 할당되지 않았습니다.


(속성) MyClass.someField: 부울

TypeScript Playground(사용 가능으로 설정해야 함)strictNullChecks그리고.strictPropertyInitialization이 오류 메시지를 확인합니다.)

주어진 코드 스니펫은 나의 원래 스크립트에서 단순화되었습니다.이 생성자에 값을 할당하는 대신 생성된 값을 반환하고 싶습니다.TypeScript가 언급된 오류 없이 작동하려면 어떻게 해야 합니까?

strictPropertyInitialization클래스의 생성자에서 선택 사항이 아닌 모든 속성을 초기화합니다.이 검사는 예기치 않은 초기화되지 않은 속성을 얻지 않도록 보장하기 때문에 유용할 수 있습니다.오류를 해결하는 몇 가지 방법이 있습니다. 첫 번째 두 가지는 일반적인 방법입니다. 사용자의 경우에는 last on만 적용됩니다(완전성을 위해 모두 포함).

필드 초기화

속성을 다음과 같이 정의하는 경우boolean만일 그렇다면true또는false필드를 선언하거나 생성자에서 초기화할 때 초기화:

class MyClass {
  someField: boolean = false;
  constructor() {
    return { someField: true };
  }
}

필드를 선택사항으로 설정

필드가 가능한 경우undefined필드 선언에 다음을 사용하여 표시해야 합니다.?또는 필드를 입력합니다.undefined|boolean

class MyClass {
    //someField?: boolean;
    someField: boolean | undefined;
    constructor() {
        return { someField: true };
    }
}

null이 아닌 어설션 사용

생성자에서 시작한 이후로 현재 개체를 실제로 초기화하지 않습니다.this하지만 새로운 것을 반환하면 컴파일러에게 오류에 대해 잘못되었다고 말할 수 있고 null이 아닌 어설션을 사용할 수 있습니다.이 주장은 특히 다음에 제한이 있기 때문에 도입되었습니다.strictPropertyInitialization확인하고 컴파일러가 틀릴 때도 있습니다.이러한 경우 컴파일러가 생각하는 것을 재정의할 수 있지만 명시적으로 설명해야 합니다.

class MyClass {
    someField!: boolean;
    constructor() {
        return { someField: true };
    }
}

솔루션 1

이름 뒤에 (!) 기호 추가:

someField!:string;

솔루션 2

TypeScript 구성 파일 열기tsconfig.json컴파일러 옵션에 이 코드를 추가합니다.

 "angularCompilerOptions": {
    //   ...
    "strictPropertyInitialization": false
    //   ...
  }

참고: 정적 분석을 약하게 만듭니다.

"angularCompilerOptions": {
    //   ...
    "strictPropertyInitialization": false
    //   ...   }

각진 최신 버전에 따르면 엄격한 타이핑을 지원하므로 비활성화해야 합니다.

수정 및 서버 재시작

{someField:true}을(를) 새 개체로 간주하고 someField 속성이 초기화되지 않았습니다.생성자 내부의 반환 목적은 무엇입니까?다음으로 대체할 수 있습니다.this.someField = true.

편집: 사실, 더 많은 정보를 위해 디버깅했습니다. "엄격한 속성"을 추가해 보십시오.Initialization": 컴파일러 옵션 및 확인에 대해 false입니다.하지만 타입의 엄격함(TS의 아름다운 특징)을 압도합니다.하지만 제 생각에는, 이것을 하지 마세요.자세한 내용은.

문자열 유형의 변수를 선언하는 동안 동일한 오류가 발생하면 빈 문자열로 초기화하여 문제를 해결할 수 있습니다.

public myString: string= ' ';

또한 정의되지 않은 키워드를 사용할 수 있습니다.

public myString: string | undefined;

변수 이름 바로 뒤에 !를 사용할 수 있는 배열이면,

public myArray!: arrayName[];

언급URL : https://stackoverflow.com/questions/54104187/typescript-complain-has-no-initializer-and-is-not-definitely-assigned-in-the-co

반응형