- 선택적 타입
- Alias 타입
- argument 타입
- return 타입
- readonly
- tuple
- undefined, null
- any
- void
- unknown : 알 수 없는 타입, 확인 필요
- never : 예외, 리턴 값이 없는 함수에서
숫자, 문자열, 불리언
let a : number =1;
let b : string = "il";
let c : boolean = true;
배열
let a : number[] =[1];
let b : string[] = ["il"];
let c : boolean[] = [true];
키워드 변수 : 타입이름 = 값
암묵적으로 써도 됨
키워드 변수 = 값
1. 객체에 타입 정해주기
const player _: object_ = {
name: "nico"
}
- object라고 설정해주면 player.name에 접근할 수 없다
- 무조건 name이 있지만 age는 있을 수도 있는 객체를 만들고 싶을 때
const player : {
name : string,
age?: number //age는 optional
} = {
name : "nico"
}
if(player.age <10){ } //Object is possibly 'undefined'
if(player.age && player.age <10){ } //이러면 된다
2. 여러 객체를 같은 포맷으로 만들어주고 싶을 때 : alias 타입을 만들어준다 (별명)
- 객체 외에 다른 타입도 얼마든지 만들어줄 수 있다
type Player = {
name:string,
age?:number
}
const Nico : Player = {
name: "nico"
}
const Lynn : Player = {
name: "lynn",
age: 12
}
type Age = number;
type Name = string;
type Player ={
name: Name,
age?:Age
}
3. 함수의 리턴값의 타입을 지정하는 방법
- 매개변수
function playerMaker(name: string){
return {
name
}
}
const nico = playerMaker('nico') //정해진 타입의 매개변수가 필수가 된다
nico.age = 12 //error : name이라는 속성만 정의해놓아서
function playerMaker(name: string): Player { //반환 값이 Player
return {
name
}
}
const playerMaker = (name:string):Player => ({name})
const nico = playerMaker('nico') //이 함수가 Player 타입이라는 것을 안다
nico.age = 12 //이제 가능
string 타입으로 name을 받고 Player 타입을 return하는 함수로
키워드 + 변수 : 타입 = 값 [명시]
키워드 + 변수 : 타입[] = 값 [배열]
키워드 + 변수 = {
키 : 값,
키? : 값 //optional
}
type + Alias = { name : string, age? : number }
let 변수명 : Alias = 값
매개변수, 리턴 값에 타입 명시
function functionName(name : string) : Player{
return {
name
}//이렇게 해도 나중에 이 값에 대해 Player의 키에 대한 값을 넣을 수 있다
}
자바스크립트는 없는 기능
자바스크립트로 변환된 다음에는 추가, 변경 가능
type Player = {
readonly name:Name
age?:Age
}
nico.name = "las" //error: readonly라서 변경 불가능
const numbers: readonly number[] = [1,2,3,4]
nymbers.push(1)//error, readonly니까
const names: readyonly string[] = ["1","2"]
names.push(), map() 등을 모두할 수 없다
Tuple
- array를 생성할 수 있다
- 최소한의 길이를 가져야 하고 (정해진 개수 조건을 충족해야 한다)
- 특정 위치에 특정 타입이 있어야 한다
- 자바스크립트에는 없으므로 변환 후에는 사용 불가능
const player: [string, number, boolean] = []//아래 이미지의 에러가 뜬다
player[0]=1//number 타입이 첫번째 자리에 들어갈 수 없다고 뜬다
const player: readonly [string, number, boolean] = ['nico',1,true]
//아예 변경 불가
undefined, null, any
- any : 타입스크립트를 사용하지만 아무 타입이나 다 쓰고 싶으면 사용하는 것
- 하지만 타입스크립트를 쓰는 의미가 없으므로 비추천
let a : undefined = undefined
let b : null = null
선택적 타입을 쓰면 정해진 타입이 아니면 undefinedrk ehlsek
let c : any[] = [1,2,3,4]
let d : any = true
//c+d가 가능해진다
let a : unknown; //Typescript로부터 일종의 보호를 받는다
let b = a+1// 할 수 없다. unknown이니까 확인하기 전에는 조작 불가능
if(typeof a === 'number'){//이렇게 확인을 하는 과정을 직접 만들어줘야 한다
let b = a+1;
}
if(typeof a === 'string'){//이렇게 확인을 하는 과정을 직접 만들어줘야 한다
let b = a.toUpperCase();
}
function hello(){ //암묵적으로 타입 확인 - function hello(): void
console.log('x')
}
function hello():void{ //명시해도 되지만 필요 없음
console.log('x')
}
const a = hello();
a.toUpperCase(); //void니까 안된다고 나온다
function hello():never{
return "X" //아무것도 리턴 X
}
function hello():never{
throw new Error("xxx")//리턴하지 않고 오류를 발생시키는 함수
}
fucntion hello(name: string | number){
name +1 //불가능, number일 수도 있으니까
if(typeof name === "string"){
name //string
}else if(typeof name === "number"){
name //number
}else{
name // type:never (이 경우는 발생할 수 없으니까)
}
}