'!:'와 '의 차이점은 무엇입니까?TypeScript 개체 정의에서?
Class Employee {
firstName: string;
lastName!: string;
middleName?: string;
}
이 세 가지 다른 분야의 차이점은 무엇입니까?Employee 수업?
옵션이 때strictNullChecks: false
가지고 계신다면,strictNullChecks: false의 신의에tsconfig.json그렇다면 그들은 가진 이후로 정확히 같습니다.strictNullChecks되지 않은 값을 수 합니다. disabled는 null을 의미합니다.
옵션이 때strictNullChecks: true
class Employee {
firstName: string;
lastName!: string;
middleName?: string;
}
firstName: string는 것을 의미합니다.firstName .string.null또는undefinedfirstName에 대한 올바른 값이 아닙니다.
되지 않은 모든 은 " " " " " " 입니다.undefined가 발생합니다.Property 'firstName' has no initializer and is not definitely assigned in constructor
을 오를침키려선면다언변합음니야다해경로으로 변경해야 합니다.firstName: string = 'Some default value'또는 생성자를 추가하고 생성자에 해당 값을 할당합니다.
constructor() {
this.firstName = 'some default value';
}
이제! 구문을 보겠습니다. 그lastName!: string은 구은다유사다니와 합니다.lastName: string그것이 기본적으로 다음과 같이 말하고 있다는 점에서.string유일하게 허용되는 유형입니다. null그리고.undefined허용되지 않습니다.그러나 이것은 명확한 할당 오류에 대해 컴파일러를 침묵시킬 것입니다.다음과 같은 코드가 있다고 가정해 보겠습니다.
class Employee {
firstName: string;
lastName!: string;
middleName?: string;
constructor() {
// This will silence the compiler about first name not initialized
this.firstName = 'some default value';
// The compiler cannot tell that lastName is assigned in init() function
this.init();
}
private init(): void {
this.lastName = 'some default value';
}
}
코드인 이전코에서드,에서,lastName 서확할니다됩에 되어 있습니다.constructor유로를 this.init()하지만 컴파일러는 그것을 알지 못합니다.따라서!를 추가하는 것은 기본적으로 컴파일러에게 "닥치고 내가 뭘 하고 있는지 안다"고 말하는 것입니다.코드의 정확성을 확인하는 것은 사용자에게 달려 있습니다.
에 middleName?: string통사론이는 다음과 비슷합니다.middleName: string | undefined모든 값의 기본값은 다음과 같기 때문입니다.undefined컴파일러는 불평하지 않을 것입니다.middleName할당되지 않았습니다.
그!그 위치에서 확실한 할당 주장입니다.이것은 null이 아닌 어설션 연산자의 선언 수준 버전이지만 표현식이 아닌 속성(변수에도 사용될 수 있음)
이 예에는 두 가지 또는 세 가지 오류가 있습니다.
Class야 .classJavaScript 및 TypeScript는 대소문자를 구분합니다.은 라이켜합다니야를에 합니다.
firstName(또는 무조건 할당하는 생성자).그
!lastName에 TypeScript를 합니다.lastName하기 위해입니다.firstName그러나 실제로 사용하는 할당을 수행하는 것은 없습니다(예시).!당신이 하고 있는 것을 확실히 알고 있는 타입스크립트를 약속합니다.
편집: 나중에 링크한 코드는 위의 #1과 #2를 다루지만 #3은 다루지 않습니다.TypeScript에서 경고하지 않음lastName할당되지 않고 해당 값이 문자열이라고 가정합니다. 실제로는 해당 값이 존재하지 않으므로 값을 읽습니다.undefined.
TypeScript 문서에는 잘 숨겨져 있습니다.
?인터페이스에 설명되어 있으며 선택적 속성을 표시합니다.
!는 확증 연산자입니다.이것은 컴파일러에게 속성이 설정되었음을 알려줍니다.null또는undefined이 그렇게 TypeScript의 분석이 감지하지 못하더라도.
그건 그렇고.ClassTypeScript 또는 JavaScript 키워드가 아니므로 해당 위치에 오류가 발생합니다.클래스를 선언하기 위한 키워드는 다음과 같습니다.class 및 및합니다. (TypeScript 및 JavaScript 드는문를자분구합니다소대워식별와자키▁are(▁java▁type▁sensitive다니합type▁(분▁case및구▁java▁andscript를script▁keywordsifiers자)Class그리고.class다른 것입니다.).
언급URL : https://stackoverflow.com/questions/63522675/what-is-the-difference-between-and-in-typescript-object-definitions
'programing' 카테고리의 다른 글
| 루비에서 attr_accessor란 무엇입니까? (0) | 2023.06.12 |
|---|---|
| 왜 이것은 유형 불일치가 아닌가요? (0) | 2023.06.12 |
| 설치된 종속성에서 @types 유형 제외 (0) | 2023.06.07 |
| 문을 사용하여 중첩됨 (0) | 2023.06.07 |
| 루비의 숨겨진 특징 (0) | 2023.06.07 |