inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스

Generic in Function (함수에서 제너릭 사용하기)

Generic in Function 강의 instantiator 질문입니다.

414

Intuitioner

작성한 질문수 5

0

Generic in Function (함수에서 제너릭 사용하기) 강의 내용에서의 질문입니다.

class Car {
    brand: string;
    codeName: string;

    constructor(brand: string, codeName: string) {
        this.brand = brand;
        this.codeName = codeName;
    }
}

function instantiator<T extends { new(...args: any[]): {} }>(classObject: T,
    ...args: any[]) {
    return new classObject(...args);
}

console.log(instantiator(Car, 'BMW', 1111));

Car의 경우 생성자의 codeName 인자의 타입이 string인데

...args의 타입을 any[]로 지정했기 때문에

instantiator(Car, 'BMW', 1111)에서 codeName에 number값을 넣어도 오류가 발생하지 않았습니다.

물론 단순히 할당하기만 하는 코드이기 때문에 런타임에서도 오류가 발생하지는 않을 것 입니다.

좀 더 정확한 타입 체킹을 할 수 있도록 위 케이스에서 클래스 생성자의 인자 타입까지 반영해서 체크하는 instantiator를 작성할 수 있을까요?

typescript

답변 1

0

코드팩토리

안녕하세요!

아래처럼 말씀이실까요?

image

감사합니다!

0

서민종

안녕하세요 저도 비슷한 문제로 고민하고 있었는데요

인자값도 인자값인데 결과값을 사용하려고 할 때 어떻게 해야될 지 고민중이라 질문드립니다.

function instantiator<T extends {new (...args: any[]) : {}}>(constructor: T, ...args: any[]){
    return new constructor(...args);
}

function instantiator2<T extends {new (...args: any[]) : {name:any, age:any}}>(constructor: T, ...args: any[]){
    return new constructor(...args);
}

const idol1 = instantiator2(Idol,'name', 19);
const car1 = instantiator(Car,'name', '19');
console.log(idol1);
console.log(idol1.age);
console.log(idol1.name);
console.log(car1);

이런 식으로 결과값 오브젝트에 직접 파라미터를 박아주면 값을 사용할 수 있었긴 했는데 이러면 제너릭을 사용하는 의미를 못 느끼겠어서 해결할 방법이 있는지 궁금해요.

0

코드팩토리

제너릭을 사용하는 의미를 못느낀다는게 어떤 말씀이신지 잘 모르겠습니다. 제너릭을 사용할때 제너릭에 해당되는 정의는 어디서든 정의를 해둬야합니다. {name:any, age:any} 타입을 상속받는 타입을 {name:any, age:any} 정의 없이 사용하는 방법은 존재하지 않습니다. 민종님이 생각하는 '제너릭이 의미 있어지는' 경우를 예제로 작성 해주세요.

ts강의 42. override 마지막즘 질문

0

45

1

25. js array의 문제점 4:55쯤 질문입니다

0

31

1

union 기본기 7분 53초 질문 드립니다.

0

119

2

Equality Narrowing 관련 질문

0

120

2

tsconfig.json 설명

0

125

2

환불 관련 질문 드립니다.

0

181

1

재너릭이랑 any 차이가 뭔가요?

0

222

2

리플렉션과 데코레이터 사용시 의문점

0

136

2

변수의 선언이 중복되었다고 할 때

0

165

2

type 으로 함수의 형식을 정의하고 함수를 정의할 때

0

148

1

declare 키워드가 가끔 나오던데 이건 뭔가요?

0

152

2

class가 값이 될 수 있다는 말을 이해하기 어렵습니다.

0

128

1

null값의 타입은 object 아닌가요?

0

189

1

타입? 인터페이스? 질문있습니다

0

148

1

type functionOnly = Extract<string| (()=> void), Function> 의 의미

0

171

2

npm install cache error

0

206

1

12_experimental_decorator, class decorator

0

132

1

9_class/7_override.ts, super 키워드 질문

0

212

2

강의 계획이 궁금합니다!

0

290

1

instantiator 질문

0

152

1

따라하는데 에러 생기네요

1

398

2

webstorm에서 ts-node 설치해도 문제가 발생하고 있습니다.

0

489

3

infer를 사용한 type의 쓰임새

0

133

1

혹시 수업하면서 작성된 코드는 따로 받아 볼 수 없나요?

0

207

1