배열을 정의 하는 2가지 방법
1) const fruits: string[] = ["가", "나"] 주로 사용함
2) const num: Array<number> = [1, 2, 3]
readonly 주어진 데이터를 읽기만 가능하고 업데이트 할 수 없다.
funcion printArray(fruits: readonly string[]) { }
let student:[string, number];
student = ["hyojin", 123]
값을 할당할 때 이렇게 할당할 수 있다.
student[0] // "hyojin"
student[1] // 123
피할 수 있는 방법으로
오브젝트 디스덕처링을 이용하면 된다.
원하는 변수를 선언한 뒤 student 를 할당하게 되면
const [name, age] = student;
배열의 첫번째 값이 name, 두번째 값이 age 이렇게 할당되게 된다.
student.name
student.age
type Text = string;
const name:Text = "hyojin"
const address:Text = "korea"
type Num = number
type Student {
name: string;
age: number
}
type Name = "name"
let hyojinName : Name
hyojinName = "dfsf" X
type JSON = "json"
const json:JSON = "json"
type Boal = true
이것을 왜 쓰는걸까? 활용할 수 있는 예제
type Dir = "right" | "left" | "up" | "down"
function move(dir : Dir) {
console.log(dir)
}
move("down"); // right, left, up, down 4가지 중 선택 가능.
type Size = 2 | 4 | 8 | 12
const s : Size = 4;
type SuccessState = {
result : "success"
response : { body: string } }
type FailState {
result : "faul"
reason : string }
type LoginState = SuccessState | FailState
방법 1
function login(id: string, password: string) : Promise<LoginState> {
return {
result : "success"
response : { body: "login!" } } }
방법 2
function printLoginState(state: LoginState){
if(state.result === "seccess") {
console.log(`🥳 ${state.response.body}`)
} else {
console.log(`😢 ${state.reason}`) }
}
type Student = {
name : string
score : number
}
type Worker = {
empolyeeId : number
work : () => void
}
function internWork(person : Student & Worker) {
console.log(person.name, person.score,
person.empolyeeId, person.work )
}
internWork({
name : "hyojin",
score : 1,
empolyeeId : 222,
work : () => {}
})
union type 추가함.
type DaysOfWeek = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday";
enum Days {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
}
console.log(Days.Monday);
let day: Days = Days.Saturday;
day = Days.Thursday;
day = 3; // 컨파일 에러가 발생하지 않음.
console.log(day);
- 문제는 다른 것을 할당해도 컴파일 에러가 발생하지 않는다.
- enum type 을 사용했을 때 타입은 보장되지 않지만 union type 으로 대체하면타입이 보장된다.
let dayOfWeek: DaysOfWeek ="Saturday"
dayOfWeek = "hyojin" X
dayOfWeek = 2 X
let text = "hello"
text = "hi" O
text = 1 X
- 선언함과 동시에 문자열을 할당했기 때문에 타입스크립트에서 자동으로 string 으로 타입 추론을 했다.
function page(message) {
console.log(message)
}
page("hello") O
page(1 ) O
- 여기서 message의 type은 any type으로 추론했기 때문에 여기선 string, number type 다 가능하다. 그러나 정확히 인자가 어떤 타입을 예상하고 있는지 명시해서 작성하는 것이 좋다.
function page(message: string) {
console.log(message)
}
page("hello") O
page(1 ) X
Function add(num1: number, num2: number){
return x + y
}
const result = add(1, 2)
- return 값도 result도 number 라고 타입 추론 가능.
가정> 타입은 any 지만 string을 return 하는 함수
function jsStrfunc() : any {
return "hello"
}
const result = jsStrfunc()
result.length X //문자열의 길이를 구하는 length 를 사용하려 했으나 에러!
확신하는데!! 이때 typefunction jsStrfunc() : any {
return "hello"
}
const result = jsStrfunc()
(result as string).length //5 문자열에서 가능한 apl를 사용할 수 있다.
(result as string) result라는 변수가 string type 인것을 알고 문자- 열처럼 사용한다는 캐스팅을 사용할 수 있다.!
만약 return type이 number 라면 type error 는 발생하지 않지만 실행할때 에러가 발생한다.
내가 100% 장담할때 사용해야한다.
(result as string).length
(<string>result).length
function findNumbers(): number[] | undefied {
return undefinde
}
const numbers = findNumbers();
numbers.push(2) // 에러발생 undefinde 일수 도 있고 숫자배열 일수 도 있기 때문
여기서 무조건 null이 아니고 값이 있어! 옵션이 아니라고 할 수 있음
optional parameter 와 반대 표현
1)
const numbers = findNumbers()!;
numbers.push(2)
2)
const numbers = findNumbers();
numbers!.push(2)