-
타입을 파라미터로 입력하는 GenericTypescript 2022. 6. 17. 15:00
function 함수<MyType>( x: MyType[] ) :MyType { return x[0]; } let a = 함수<number>([4,2]) let b = 함수<string>(['kim', 'park'])
함수를 만들 때, 함수 이름옆에 <작명>을 붙여주면 함수를 사용할 때, <타입>을 적어주면
let a = 함수<number>([4,2]) function 함수<MyType>( x: number[] ) :number { return x[0]; }
이렇게 바뀌게 된다.
Generic 함수를 쓰면 함수를 사용할 때마다 타입을 지정하면 되므로 확장성이 좀 생긴다.
근데,
function 함수<MyType>(x: MyType) { return x - 1 } let a = 함수<number>(100)
이렇게 쓰면, 함수에 값도 숫자로 넣고, number라고 타입지정도 했는데 에러가 뜬다.
혹시 MyType에 문자가 들어갈까봐 타입스크립트가 걱정해서 미리 에러가 뜨게 되는 것이다.
그래서, Generic 타입에 제한을 할 수 있는데,
function 함수<MyType extends number>(x: MyType) { return x - 1 } let a = 함수<number>(100) //잘됩니다
이렇게, extends를 이용하면 MyType이 number의 속성을 가지고 있는지 체크하게 된다. 그래서 에러가 사라진다.
만약 클래스에 Generic타입을 쓰려면
class Person <T> { name; constructor(a :T){ this.name = a; } } let a = new Person<string>('어쩌구');
클래스 이름에 <작명>을 붙여주고 constructor에 :작명을 붙여주면
인스턴스를 만들 때, <>를 붙여줄 수 있게된다. 이러면 저기에 넣는 타입마다 a의 타입이 바뀌게 된다.
'Typescript' 카테고리의 다른 글
array에 붙이는 tuple type (0) 2022.06.17 React와 Typescript 사용 (0) 2022.06.17 타입 import/export와 namespace (0) 2022.06.17 protected, static (0) 2022.06.17 객체지향언어같은 문법제공(public, private) (0) 2022.06.17