사용자 도구

사이트 도구


typescript:generic

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
typescript:generic [2019/07/28 08:32] – [Using Type parameters in Generic Constraints] taekgutypescript:generic [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1
줄 3: 줄 3:
 JavaScript는 타입 선언이 필요하지 않고, 따라서 특정 타입을 위해 만들어진 클래스나 함수도 타입 에러를 런타임에서 일으킬 뿐이다. 코드를 실행시키기 전까지는 함수와 클래스가 모든 타입에 대응한다. 따라서 JavaScript에서는 제네릭이란 말을 듣지 못 했다. JavaScript는 타입 선언이 필요하지 않고, 따라서 특정 타입을 위해 만들어진 클래스나 함수도 타입 에러를 런타임에서 일으킬 뿐이다. 코드를 실행시키기 전까지는 함수와 클래스가 모든 타입에 대응한다. 따라서 JavaScript에서는 제네릭이란 말을 듣지 못 했다.
  
-===== 제네릭을 사용하는 이유 =====+==== 제네릭을 사용하는 이유 ====
 ''any''를 이용하여 구현하는 방법이 있겠으나 제네릭과는 차이가 있다. ''any''를 이용하여 구현하는 방법이 있겠으나 제네릭과는 차이가 있다.
 <code javascript> <code javascript>
줄 91: 줄 91:
 <code javascript>loggingIdentity({length: 10, value: 3});</code> <code javascript>loggingIdentity({length: 10, value: 3});</code>
  
-==== Using Type parameters in Generic Constraints ====+===== Using Type parameters in Generic Constraints =====
 다른 type인수에 의해 제한되는 type인수를 선언한다. 예를 들자면, 주어진 이름으로 객체의 속성을 얻고 싶다고 하자. 실수로라도 객체에 존재하지 않는 다른 속성을 갖지 않도록 하고 싶다. 그래서 2개의 타입에 제한을 둘 것이다. 다른 type인수에 의해 제한되는 type인수를 선언한다. 예를 들자면, 주어진 이름으로 객체의 속성을 얻고 싶다고 하자. 실수로라도 객체에 존재하지 않는 다른 속성을 갖지 않도록 하고 싶다. 그래서 2개의 타입에 제한을 둘 것이다.
  
줄 110: 줄 110:
 </code> </code>
  
 +===== Using Class Types in Generics =====
 +Generic을 이용해서 Factory를 만들때, 클래스타입들을 그들의 생성자 함수에 의해 참조하는 것은 필수적입니다.
 +<code javascript>
 +function create<T>(c: {new(): T}): T {
 +  return new c();
 +}
 +</code>
 +
 +더 고급 예시는 클래스의 생성자 함수와 객체측 사이에서의 관계를 제한하고 추론하기 위해 프로토타입 속성을 사용한다.
 +
 +<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<A extends Animal>(c: new() => A): A {
 +    return new c();
 +}
 +createInstance(Lion).keeper.nametag; //typecheck!
 +createInstance(Bee).keeper.hasMask; //typecheck!
 +</code>
typescript/generic.1564302738.txt.gz · 마지막으로 수정됨: 2025/04/15 10:05 (바깥 편집)