source

! 오브젝트 메서드 뒤에 typescript가 있는 연산자

ittop 2023. 2. 26. 10:31
반응형

! 오브젝트 메서드 뒤에 typescript가 있는 연산자

나는 목적이 있다.X방법을 써서getY()오브젝트 반환Y방법을 써서a(), 타이프 스크립트로.이런 표현은 무슨 뜻입니까?

X.getY()!.a()

제 생각엔...!연산자는 null과 대조하기 위해 사용되는데 구체적으로 어떻게 작동합니까?언어에서는 어디에 정의되어 있습니까?

이것은 "Non-Null assertion 연산자"라고 불리며 컴파일러에게 다음과 같이 알려줍니다.x.getY()는 늘이 아닙니다.

이것은 새로운 타이프스크립트 2.0 기능으로, 새로운 기능 페이지에서 읽어보실 수 있습니다.내용은 다음과 같습니다.

새로운 ! post-fix 표현 연산자는 타입 체커가 그 사실을 결론지을 수 없는 컨텍스트에서 피연산자가 null이 아니거나 정의되지 않았다고 주장하기 위해 사용될 수 있습니다.특히, x! 연산은 null 및 defined excluded를 포함하는 x 유형의 값을 생성합니다.T와 같은 x 및 x 형식의 형식 어사션과 마찬가지로 ! non-null 어사션 연산자는 단순히 내보낸 JavaScript 코드에서 제거됩니다.

// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
    // Throw exception if e is null or invalid entity
}

function processEntity(e?: Entity) {
    validateEntity(e);
    let s = e!.name;  // Assert that e is non-null and access name
}

편집

이 기능을 문서화하는 데 문제가 있습니다.Null이 아닌 어설션 연산자를 문서화합니다(!).

null이 아닌 어설션 연산자: !

  • TS 컴파일러에게 변수의 값이null | undefined
  • TS 컴파일러에 부족한 지식을 가지고 있을 때 사용합니다.

다음은 동작의 간단한 예를 제시하겠습니다.

let nullable1: null | number;
let nullable2: undefined | string;

let foo  = nullable1! // type foo: number
let fooz = nullable2! // type fooz: string

기본적으로는,null | undefined타입에서


이거 언제 써요?

타이프 스크립트는 이미 타이프 가드를 사용하여 타입을 추론하는 데 매우 능숙합니다.

let nullable: null | number | undefined;

if (nullable) {
    const foo = nullable; // ts can infer that foo: number, since if statements checks this
}

다만, 다음과 같은 시나리오가 있는 경우가 있습니다.

type Nullable = null | number | undefined;

let nullable: Nullable;

validate(nullable);

// Here we say to ts compiler:
// I, the programmer have checked this and foo is not null or undefined
const foo = nullable!;  // foo: number

function validate(arg: Nullable) {
    // normally usually more complex validation logic
    // but now for an example
    if (!arg) {
        throw Error('validation failed')
    }
}

제 개인적인 조언은 가능한 한 이 오퍼레이터를 피하라는 것입니다.컴파일러가 코드를 정적으로 체크하도록 합니다.다만, 특히 벤더 코드의 경우는, 이 오퍼레이터를 사용할 필요가 없는 경우가 있습니다.

언급URL : https://stackoverflow.com/questions/38874928/operator-in-typescript-after-object-method

반응형