문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| typescript:generic [2019/07/28 08:25] – [Using Type parameters in Generic Constraints] taekgu | typescript:generic [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 3: | 줄 3: | ||
| JavaScript는 타입 선언이 필요하지 않고, 따라서 특정 타입을 위해 만들어진 클래스나 함수도 타입 에러를 런타임에서 일으킬 뿐이다. 코드를 실행시키기 전까지는 함수와 클래스가 모든 타입에 대응한다. 따라서 JavaScript에서는 제네릭이란 말을 듣지 못 했다. | JavaScript는 타입 선언이 필요하지 않고, 따라서 특정 타입을 위해 만들어진 클래스나 함수도 타입 에러를 런타임에서 일으킬 뿐이다. 코드를 실행시키기 전까지는 함수와 클래스가 모든 타입에 대응한다. 따라서 JavaScript에서는 제네릭이란 말을 듣지 못 했다. | ||
| - | ===== 제네릭을 사용하는 이유 | + | ==== 제네릭을 사용하는 이유 ==== |
| '' | '' | ||
| <code javascript> | <code javascript> | ||
| 줄 58: | 줄 58: | ||
| myGenericNumber.add = function(x, y) { return x + y }; | myGenericNumber.add = function(x, y) { return x + y }; | ||
| </ | </ | ||
| - | Generic class는 오직 객체에서만 generic을 사용가능하다. 그렇기 때문에 class작업을 할 때 정적 멤버들은 generic사용이 안된다는 점을 유념하자 | + | <WRAP center round important 60%> |
| + | Generic class는 오직 객체에서만 generic 사용가능하다. 그렇기 때문에 class작업을 할 때 정적 멤버들은 generic사용이 안된다는 점을 유념하자 | ||
| + | </ | ||
| ===== Generic Constraints ===== | ===== Generic Constraints ===== | ||
| 줄 89: | 줄 91: | ||
| <code javascript> | <code javascript> | ||
| - | ==== Using Type parameters in Generic Constraints ==== | + | ===== Using Type parameters in Generic Constraints ===== |
| + | 다른 type인수에 의해 제한되는 type인수를 선언한다. 예를 들자면, 주어진 이름으로 객체의 속성을 얻고 싶다고 하자. 실수로라도 객체에 존재하지 않는 다른 속성을 갖지 않도록 하고 싶다. 그래서 2개의 타입에 제한을 둘 것이다. | ||
| + | <code javascript> | ||
| + | function getProperty< | ||
| + | return obj[key]; | ||
| + | } | ||
| + | |||
| + | let x = { | ||
| + | a: 1, | ||
| + | b: 2, | ||
| + | c: 3, | ||
| + | d: 4 | ||
| + | } | ||
| + | |||
| + | getProperty(x, | ||
| + | getProperty(x, | ||
| + | </ | ||
| + | |||
| + | ===== Using Class Types in Generics ===== | ||
| + | Generic을 이용해서 Factory를 만들때, 클래스타입들을 그들의 생성자 함수에 의해 참조하는 것은 필수적입니다. | ||
| + | <code javascript> | ||
| + | function create< | ||
| + | return new c(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 더 고급 예시는 클래스의 생성자 함수와 객체측 사이에서의 관계를 제한하고 추론하기 위해 프로토타입 속성을 사용한다. | ||
| + | |||
| + | <code javascript> | ||
| + | class BeeKeeper { | ||
| + | hasMask: boolean; | ||
| + | } | ||
| + | |||
| + | class ZooKeeper { | ||
| + | nametag: string; | ||
| + | } | ||
| + | |||
| + | class Animal { | ||
| + | numLegs: number; | ||
| + | } | ||
| + | |||
| + | class Bee extends Animal { | ||
| + | keeper: BeeKeeper; | ||
| + | } | ||
| + | |||
| + | class Lion extends Animal { | ||
| + | keeper: ZooKeeper; | ||
| + | } | ||
| + | |||
| + | function createInstance< | ||
| + | return new c(); | ||
| + | } | ||
| + | createInstance(Lion).keeper.nametag; | ||
| + | createInstance(Bee).keeper.hasMask; | ||
| + | </ | ||