TypeScript의 유형 추정
지금 제 이메일 목록을 구독하려면 http://jauyeung.net/subscribe/으로 전화하십시오.
TypeScript 엔티티에는 연관된 데이터 유형이 있으므로 TypeScript 컴파일러는 변수에 지정된 유형이나 값에 따라 데이터 유형을 추측할 수 있습니다.유형의 값에 따라 유형을 변수, 함수 매개 변수, 함수 등에 자동으로 연결하는 것을 유형 추정이라고 한다.
기본 유형 추정
TypeScript는 변수에 값을 지정할 때 변수의 데이터 유형을 추정할 수 있습니다.예를 들어, 만약 우리가 숫자에 값을 부여한다면, 그것은 자동으로 이 값이 숫자라는 것을 알게 될 것이며, 코드에서 변수의 데이터 형식이number라는 것을 명확하게 알려줄 필요가 없을 것이다.또한 문자열, 부울, 기호 등 다른 기본 유형도 마찬가지입니다. 예를 들어,
let x = 1;
그리고 TypeScript 컴파일러는 x
이 숫자라는 것을 자동으로 알았다.그것은 이런 간단한 유형의 추측을 쉽게 처리할 수 있다.그러나 여러 데이터 유형으로 구성된 데이터를 할당할 때 TypeScript 컴파일러는 우리가 할당한 변수의 유형을 식별하기 위해 더욱 노력해야 한다.예를 들어, 다음 코드가 있는 경우
let x = [0, 'a', null];
그리고 그룹의 모든 항목의 데이터 형식을 고려하고 모든 내용과 일치하는 데이터 형식을 찾아야 합니다.이것은 모든 그룹 요소의 후보 유형을 고려한 다음 그것들을 조합하여 변수 x
에 데이터 형식을 만듭니다.위의 예에서 첫 번째 그룹 요소는 숫자이고 두 번째는 문자열이며 세 번째는 null
유형이다.공통점이 없기 때문에 유형은 반드시 모든 수조 원소 유형의 병집합, 즉 number
, string
과 null
이어야 한다.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는 기본 데이터(예: 원어 값)의 변수에 지정된 내용에 따라 유형을 추정할 수 있습니다.만약 우리가 변수에 더 복잡한 내용을 분배한다면, 우리가 자동으로 값을 부여하는 변수 유형은 통상적으로 똑똑하지 않다고 추정할 수 있다.이런 상황에서 우리는 변수의 유형을 직접 주석해야 한다.
이것은 또한 상하문 형식 입력을 실행할 수 있으며, 변수의 유형은 코드의 위치에서 추정된다.예를 들어, 만약 우리가 지정한 함수 변수를 입력하는 인터페이스에서 함수 서명을 정의한다면, 함수 파라미터가 함수 서명에 있는 위치에 따라 함수 파라미터의 데이터 형식을 추정할 수 있다.
Reference
이 문제에 관하여(TypeScript의 유형 추정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/type-inference-in-typescript-4kgo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)