TypeScript의 유형 추정

아마존에서 제 책을 보려면 https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62으로 전화하세요
지금 제 이메일 목록을 구독하려면 http://jauyeung.net/subscribe/으로 전화하십시오.
TypeScript 엔티티에는 연관된 데이터 유형이 있으므로 TypeScript 컴파일러는 변수에 지정된 유형이나 값에 따라 데이터 유형을 추측할 수 있습니다.유형의 값에 따라 유형을 변수, 함수 매개 변수, 함수 등에 자동으로 연결하는 것을 유형 추정이라고 한다.

기본 유형 추정
TypeScript는 변수에 값을 지정할 때 변수의 데이터 유형을 추정할 수 있습니다.예를 들어, 만약 우리가 숫자에 값을 부여한다면, 그것은 자동으로 이 값이 숫자라는 것을 알게 될 것이며, 코드에서 변수의 데이터 형식이number라는 것을 명확하게 알려줄 필요가 없을 것이다.또한 문자열, 부울, 기호 등 다른 기본 유형도 마찬가지입니다. 예를 들어,
let x = 1;
그리고 TypeScript 컴파일러는 x이 숫자라는 것을 자동으로 알았다.그것은 이런 간단한 유형의 추측을 쉽게 처리할 수 있다.
그러나 여러 데이터 유형으로 구성된 데이터를 할당할 때 TypeScript 컴파일러는 우리가 할당한 변수의 유형을 식별하기 위해 더욱 노력해야 한다.예를 들어, 다음 코드가 있는 경우
let x = [0, 'a', null];
그리고 그룹의 모든 항목의 데이터 형식을 고려하고 모든 내용과 일치하는 데이터 형식을 찾아야 합니다.이것은 모든 그룹 요소의 후보 유형을 고려한 다음 그것들을 조합하여 변수 x에 데이터 형식을 만듭니다.위의 예에서 첫 번째 그룹 요소는 숫자이고 두 번째는 문자열이며 세 번째는 null 유형이다.공통점이 없기 때문에 유형은 반드시 모든 수조 원소 유형의 병집합, 즉 number, stringnull이어야 한다.TypeScript를 지원하는 텍스트 편집기에서 유형을 확인하면 다음과 같은 결과를 얻을 수 있습니다.
(string | number | null)[]
우리는 세 가지 다른 유형의 수조 원소를 얻었기 때문이다.그것이 모든 3가지 유형의 연합 유형일 때만 의미가 있다.또한, TypeScript는 우리가 그것에 하나의 그룹을 분배한 것으로 추정할 수 있기 때문에 우리는 []을 얻었다.
유형 간에 공통점이 있을 때 배열에 있는 엔티티 컬렉션이 있으면 TypeScript는 모든 유형 간에 가장 공통된 유형을 찾으려고 시도합니다.그러나 그것은 그리 총명하지 않다.예를 들어, 다음 코드가 있는 경우
class Animal {  
  name: string = '';  
}

class Bird extends Animal{}

class Cat extends Animal{}

class Chicken extends Animal{}

let x = [new Bird(), new Cat(), new Chicken()];
그리고 x(Bird | Cat | Chicken)[] 유형을 가지고 있다고 추정된다.그것은 모든 종류에 Animal 슈퍼 종류가 있다는 것을 인정하지 않는다.즉, 다음 코드에 유형을 명시적으로 지정해야 합니다.
class Animal {  
  name: string = '';  
}

class Bird extends Animal{}

class Cat extends Animal{}

class Chicken extends Animal{}

let x: Animal[] = [new Bird(), new Cat(), new Chicken()];
위의 코드를 통해 우리는 TypeScript 컴파일러에게 x의 유형을 Animal[]으로 추정하라고 지시했다. 이것은 정확하다. 왜냐하면 Animal은 위 코드에 정의된 모든 다른 종류의 슈퍼클래스이기 때문이다.

컨텍스트 유형
때때로 우리가 함수를 정의할 때 매개 변수의 유형을 명확하게 지정하지 않으면 TypeScript는 함수 매개 변수의 유형을 추정할 수 있을 정도로 똑똑하다.그것은 변수의 유형을 추정할 수 있다. 왜냐하면 어떤 위치에 값이 설정되어 있기 때문이다.예를 들어,
interface F {  
  (value: number | string | boolean | null | undefined): number;  
}

const fn: F = (value) => {  
  if (typeof value === 'undefined' || value === null) {  
    return 0;  
  }  
  return Number(value);  
}
그리고 TypeScript는 value 매개 변수의 데이터 형식을 자동으로 얻을 수 있습니다. 왜냐하면 우리는 value 매개 변수를 number, string, boolean, null 또는 undefined 유형을 사용할 수 있기 때문입니다.F 인터페이스에 나열된 모든 유형이 수신되면 TypeScript에서 승인됩니다.예를 들어, 위의 fn 함수에 1을 전달하면 TypeScript 컴파일러가 코드를 수락합니다.하지만 다음과 같이 객체를 전달합니다.
fn({});
그런 다음 TypeScript 컴파일러에서 오류가 발생했습니다.
Argument of type '{}' is not assignable to parameter of type 'string | number | boolean | null | undefined'.Type '{}' is not assignable to type 'true'.(2345)
보시다시피 TypeScript 컴파일러는 매개 변수의 위치를 보고 매개 변수의 유형을 검사한 다음 인터페이스에 정의된 함수 서명에 따라 형식이 실제로 유효한지 검사할 수 있습니다.TypeScript의 매개변수 유형을 명시적으로 설정하여 데이터 유형을 확인할 필요는 없습니다.이것은 우리가 같은 서명을 가진 모든 함수에 이 인터페이스를 사용할 수 있기 때문에 많은 작업을 절약할 수 있다.매개 변수에 반복해서 형식을 설정할 필요가 없고, 우리가 정의한 인터페이스에서 형식을 정확하게 정의하면 형식 검사가 자동으로 완성되기 때문에 많은 번거로움을 절약할 수 있다.
TypeScript의 가장 좋은 특징은 데이터 형식을 검사해서 의외의 데이터 형식이나 내용을 포함하는 값이 있는지 확인하는 것이다.TypeScript는 기본 데이터(예: 원어 값)의 변수에 지정된 내용에 따라 유형을 추정할 수 있습니다.만약 우리가 변수에 더 복잡한 내용을 분배한다면, 우리가 자동으로 값을 부여하는 변수 유형은 통상적으로 똑똑하지 않다고 추정할 수 있다.이런 상황에서 우리는 변수의 유형을 직접 주석해야 한다.
이것은 또한 상하문 형식 입력을 실행할 수 있으며, 변수의 유형은 코드의 위치에서 추정된다.예를 들어, 만약 우리가 지정한 함수 변수를 입력하는 인터페이스에서 함수 서명을 정의한다면, 함수 파라미터가 함수 서명에 있는 위치에 따라 함수 파라미터의 데이터 형식을 추정할 수 있다.

좋은 웹페이지 즐겨찾기