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
}
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
}
위의 함수를 고민해보자.
1. 타입스크립트 vscode로 시작 + eslint + prettier 초기 설정 (0) | 2023.07.11 |
---|