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를 전송할 때는 완전히 정확합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달
이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다.
국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소.
지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function identify(arg: any): any{ return arg;
}
function identity(arg: T): T { return arg;
}
let output = identify('qwe');
let output = identify('qwe');
function identify(arg: T): T {
console.log(arg.length);// Error: T doesn't have .length
return arg;
}
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; };
interface lengthwise{
length: number;
}function identity(arg: T): T{
console.log(arg.length); return arg;
}
identity(123); //erroridentity('qwe'); //true
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.