TypeScript 시작 - 범용

범용


재사용 가능한 구성 요소를 만들려면 데이터 형식이 많은 형식과 호환되어야 합니다. 어떻게 호환됩니까? TypeScript는 좋은 방법을 제공합니다: 범용
 

Hello World


여러 가지 데이터 형식을 호환하려면any, 즉
function identify(arg: any): any{    return arg;
}

 
any를 사용하는 데 문제가 있습니다. 입력할 수 있는 값과 되돌아오는 값은 같은 값이 아닙니다. 예를 들어 숫자를 불러오지만 되돌아오는 값이 무엇인지 확실하지 않습니다.
이 문제를 해결하려면 유형 변수를 도입해야 합니다. - 특수한 변수입니다. 유형만 표시하고 값을 표시하지 않습니다.
function identity(arg: T): T {    return arg;
}

 
identify에 형식 변수 T를 추가하여 전송된 값의 형식을 포획한 다음에 반환된 값의 형식도 T로 설정하면 전송된 값과 반환된 값이 같은 형식의 값으로 바뀌는 수요를 실현할 수 있습니다
우리는 identify라는 함수를 범형이라고 부른다. 왜냐하면 모든 유형에 적용되고any 유형에 존재하는 문제가 없기 때문이다.
범용 방식을 사용하는 방법은 두 가지가 있다.
1. 모든 매개 변수를 전송하고 유형 매개 변수를 포함한다
let output = identify('qwe');

 
2. 유형 추론-즉 컴파일러는 전송된 매개 변수에 따라 자동으로 T의 유형을 확정하는 데 도움을 준다
let output = identify('qwe');

 

범용 변수


범주에서 우리는 범용 변수 T를 합리적이고 정확하게 사용해야 하며, T는 어떤 유형을 나타내는지 명심해야 한다
잘못된 사용:
function identify(arg: T): T {
    console.log(arg.length);// Error: T doesn't have .length
    return arg;
}

 
범형에서 우리는 length라는 속성을 사용했지만 T는 어떤 유형을 대표하기 때문에number일 수 있고,number는 length 속성이 없기 때문에 오류를 보고할 수 있습니다
length 속성을 사용하려면 그룹을 만들 수 있습니다
function identify(arg: T[]): T[] {
    console.log(arg.length);// Error: T doesn't have .length
    return arg;
}

 

범용 유형


범용 함수의 유형은 비범용 함수의 유형과 다르지 않다. 단지 하나의 유형 매개 변수가 맨 앞에 있고 함수 성명과 같다.
function identify(arg: T): T {    return arg;
}

let myIdentify: (arg: U) => U = identify;

위의 코드에서 볼 수 있듯이 서로 다른 범용 매개 변수 이름을 사용할 수 있으며, 수량과 사용 방식에 대응하기만 하면 된다
 
물론 범용 매개 변수를 하나의 인터페이스의 매개 변수로 삼을 수도 있다. 이렇게 하면 이 인터페이스가 구체적으로 사용하는 유형이 그런 유형이라는 것을 알 수 있다
interface GenericIdnetify{
    (arg: T): T;
}function identity(arg: T): T{    return arg;
}

let myGenericidentify: GenericIdnetify = identity;

 

범형류


범용 클래스는 범용 인터페이스와 차이가 많지 않아 보인다.범주형 클래스 사용(<>은 범주형 유형을 포함하고 클래스 이름 뒤에 따른다.
class GenericNumber {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };

 

범용 구속


앞의 범용 변수에서 문제가 하나 생겼다. 범용에서 파라미터의 length를 호출할 때 파라미터가 Length 속성이 없으면 오류를 보고하고 범용 제약을 사용하는 것은 일정한 조건을 만족시켜야만 이 범용을 사용할 수 있다는 것이다.
이를 위해, 우리는 구속 조건을 설명하기 위한 인터페이스를 정의합니다..length 속성을 포함하는 인터페이스를 만듭니다. 이 인터페이스와 extends 키워드를 사용하면 제약을 받습니다.
interface lengthwise{
    length: number;
}function identity(arg: T): T{
    console.log(arg.length);    return arg;
}

identity(123); //erroridentity('qwe'); //true

123을 전송할 때length 속성이 없으면 오류를 보고하고, 문자열qwe를 전송할 때는 완전히 정확합니다

좋은 웹페이지 즐겨찾기