다형성과 오버로딩
type Add = (a:number, b:number) => number;
-> call signature라고 한다.
type Add = {
(a:number, b:number) : number;
}
이런 식으로도 변경할 수 있다.
----------------------------------------------------------------------------
오버로딩은 함수가 여러 개의 콜 시그니쳐를 가질 때를 말한다.
type Add = {
(a:number, b:number) : number
(a: number, b:number, c?: number):number,
}
const add:Add = (a,b,c?:number) => {
return a+b
}
-> 파라미터가 다를 때 이런 식으로 할 수 있다.
----------------------------------------------------------------------------
제네릭은 타입의 placeholder와 같은 것...
type SuperPrint = {
<TypePlaceholder>(arr: TypePlaceholder[]):void // < > 사이에는 변수명을 쓰는 거므로 아무거나 올 수 있다 보통 T를 쓰는 경우가 많다.
}
const superPrint : SuperPrint = (arr) => {
arr.forEach(i => console.log(i));
}
superPrint([1, 2, 3, 4]);
superPrint([true, false, true]);
superPrint(["a", "b", "c"]);
superPrint([1, 2, true, false, "hello"]);
이런 식을 제네릭을 쓰게 되면 해당 배열 안에 타입이 어떤 걸 들어와도 제네릭으로 먼저 분석하고 진행하기 때문에, 오류가 나지 않는다.
type SuperPrint = {
<TypePlaceholder>(arr: TypePlaceholder[]): TypePlaceholder
}
const superPrint : SuperPrint = (arr) => arr[0]
const a = superPrint([1, 2, 3, 4]);
const b = superPrint([true, false, true]);
const c = superPrint(["a", "b", "c"]);
const d = superPrint([1, 2, true, false, "hello"]);
이런 식으로도 가능하다.
----------------------------------------------------------------------------
추상클래스 안에서 추상클래스를 만들 수 있지만, 메서드의 콜 시그니쳐만 써야 한다
abstract class User {
constructor(
private firstName:string,
private lastName:string,
private nickname:string
) {}
abstract getNickName():void
getFullName() {
return `${this.firstName} ${this.lastName}`;
}
}
이런 식으로 해야 한다.
private 말고 protected로 하면 바깥에서 받는 값을 바꿔줄 수 있다. protected는 extends 안에서만 바꿀 수 있고,
public은 모든 곳에서 재사용이 가능하다.
----------------------------------------------------------------------------
interface는 type과 비슷하지만 다르다
type 키워드가 interface보다 할 수 있는 특징이 더 많다.
오브젝트의 모양을 정할 때 인터페이스를 사용하는 게 조금 더 이해하기 쉽다.
인터페이스를 상속받으면 상속된 필드값의 생성자를 public으로만 지정해줘야 한다.
----------------------------------------------------------------------------
tsconfig.json을 사용해서 typescript를 사용해서 코딩한다는 것을 노드패키지에 알린다.
tsconfig.json을 이용하여 javascript의 버전 같은 것도 지정할 수 있다.
----------------------------------------------------------------------------
import crypto from "crypto"; -> 를 하면 보통
crypto.d.ts가 없어서 에러가 나는데 최신 노드 모듈을 이용하면 이거까지 설치가 되기 때문에 에러가 나지 않는다.
만약 import를 했는데 d.ts 파일이 없는 패키지가 있다면,
https://github.com/DefinitelyTyped/DefinitelyTyped 이 사이트에 가서 찾아보면 되는데,
위와 같은 crypto는 노드모듈에 있는 패키지기 때문에
npm i -D @types/node
명령어를 사용해서 nodejs를 위한 타입들을 다 설치해 주면 된다.
'Programming Language > TypeScript' 카테고리의 다른 글
[TypeScript] 정리 - 1 (0) | 2024.03.26 |
---|
댓글