상세 컨텐츠

본문 제목

2 타입스크립트 타입 정리

타입스크립트

by codege 2023. 7. 11. 16:52

본문

1. any 

● 타입스크립트에서 타입을 알 수 없는 상황에서는 기본 타입인 any 가 쓰인다. 

 any를 사용하는 것은 자바스크립트를 사용하는 것과 다름이 없다. 프로그램에 있어서 정확도가 떨어지고 타입스크립트를 사용하는 의미가 없어진다. 가급적 사용하지 말자.

 

2. unknown

● any와 같이 유형을 모를 때, 사용한다.

 타입스크립트에서 typeof 나 instanceof에 의해 타입이 결정되기 전까지 사용할 수 없게 한다.

 

let a: unknown =10  
let b = a <20 //b=false (boolean)
let c=a+5  // 오류가 생긴다.
if (typeof a === 'string'){
	console.log(a)  //string
}

위의 예제를 주의깊게 살펴보라. typeof에 의해 타입이 결정되면 오류가 나지 않는다.

 

3. boolean

 (== , === , || , && , ? ,!) 연산만을 사용한다.

let a: boolean = true
let b: true = true //true
let c: true = false // 오류

위와 같이 사용한다. 좀 더 편하게 명시적으로 사용할 수도 있으나, 우리는 이 한 가지로 기억하자.

b와 c는 타입과 값이 같아서 오직 한 형태만 갖을 수 있다. 이 기능을 타입 리터럴이라고 한다.

 

4. number

let a = Infinity * 3   //number
let b: number =5 //numer
let c:25 =25 // 25
let d:25 =10 //오류
let e: number = 1_000_000 // 1000000

 

5. bigint

● 새로 추가된 기능이다.

let a:bitint =100n  //a=100  숫자 끝에 n을 붙여 bigint임을 보여준다.
let b: 100n =100n //100n

 number와 마찬가지로 사칙연산이 된다. 대소비교도 된다.

 

 

6. string

 연결(+), 슬라이스(.slice) 등의 연산을 수행한다.

let a: string = 'type'
let b: 'type' = 'type'
let c: 'type' = 'a' //오류

 

7. symbol

let a =Symbol('a')
let b: symbol = Symbol('b')
let c = a === b //boolean false
let d = a + 'a' //오류
const e = Symbol('e')
let f : unique symbol =Symbol('f')
let g : unique symbol =Symbol('f')

let h = f === g //오류

  const 변수의 타입을 unique symbol로 정의할 수 있다.

 

8. 객체

let a: {b: nuber} = {
	b:12
}  // {b:number}

const a: {b: number}={
	b:12
} // {b:number}

let c: {a:string
		b:string
        readonly c:string
} = { a: 'type',b:'script',c:'javascript'}

let d: {
	a: number
	b?:string
	[key:number]: boolean
}

 위에 d 에서 b?:string  은 string타입의 프로퍼티를 포함할 수도 있고, 아닐 수도 있다는 뜻이다.

 [key:number]:boolean boolean타입의 값을 갖는 number 타입의 키 프로퍼티를 갖는다는 소리다.

d={a:1}
d={a:1 , b:undefined}
d={a:1,5:true , 6:false}
d={3:true} //오류 a값이 할당되지 않았다.

 [key:nmber] 인덱스 시그니처 하고 하는데 여러 개의 값을 추가할 수 있다는 뜻이다.

 c 에서 readonly는 초기 값이 바뀔 수 없음을 말한다.

 

9. 배열 => 연결,푸시,슬라이스 등을 지원한다.

let a:number[] = [1,2,3,4]
let b:string[]=["1","2"]
let c:(string|number)[] = [1,'a']
const d:(string|number)[]=[1,"b"]

c.push(1)
c.push("b")


let e = ["a"]
e.push("b")
e.push(3) // 오류

let f=[]
f.push(1)
f.push("a")

 

10. 튜플 => 고정된 배열, 튜플은 타입을 명시해야 한다.

let a:[number]=[1]
let b:[string,boolean,number]=["a",true,123]
let c:[number,number?][]=[[3],[3,5],[12]]
let d:([nmber]|[number,number])[]=[[3],[3,5],[12]]
let e:[number,...string[]]=[1,"a","b"]

 c 와 d는 같은 표현이 된다.

 e ... 은 최소 한 개의 문자를 갖아야 한다는 뜻이다.

 

11. 없음

null : 값이 없다.

undefined : 정의되지 않았다.

void : 함수에서 반환값이 없다.

never : 절대 반환하지 않는 함수 

 

 

12. 열거형 (enum)

enum Alphabet {
	A,
	B,
	C
}

enum Alphabet {
	A=0,
	B=1,
	C=2
}

● 위의 두 예제는 같은 값을 말한다.

● 접근 법은

let a = Alphabet.A
let b = Alphabet["B"]

 

새로운 타입 이름 만들기.

type Tail = number
type Student = {
	name: string
    tail: Tail
}

let a: Tail = 172
let b:Student = {
	name:'type',
    tail:a
}

 

타입의 합집합과 교집합 (union, intersection)

type A={a:string,b:number}
type B={a:string,c:boolean,d:number}

type AorB = A | B
type AandB = A & B

let P: AorB = {a:'type',b:13}

P={a:'type',c:true,d:34}

P={a:'type',b:13,c:false,d:23}

let Q:AandB={a:'type',b:22,c:true,d:91}

AorB는 A , B, AorB 모두 가능하다

AandB는 A와 B가 모두 있는 것만 가능하다.

function A(a:boolean){
	if(a){
    	return "true"
    }
    return null
}

type A = string | null

function (a:string,b:number){
	return a || b
}

위의 함수를 고민해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

관련글 더보기