done
, value
를 담은 오브젝트를 반환한다.배열과 이터레이터를 비교했을 때, 배열이 더 편리하게 사용됨에도 불구하고 이터레이터가 있는 이유
1. 기능이 많다는게 항상 좋다는 건 아니다.
이터레이터는 배열보다 가볍다.
- 이터레이터만 할 수 있는 작업
배열을 이용하면 배열은 모든 아이템을 모두 메모리에 올려놔야 한다.
그만큼의 공간을 사용하지만, 이터레이터는 정의된 변수만 사용된다.
(if)
typeof variable === 'number'
변수나 값의 타입을 명확하게 지정하고 다룰 때 쓰인다.
typeof
타입가드if(typeof item === "string){
// string 타입
}
else {
return item // string 외 타입
}
typeof를 사용하면 아래와 같은 값을 얻을 수 있다.
이렇게 정의 된 타입을 사용하면 범위를 좁힐 수 있다.
"string", "number", "bigint", "boolean", "symbol", "undefined", "object", "function"
in
타입가드object의 타입가드를 사용해야 할 경우 in
타입가
주어진 객체에 주어진 속성이 있으면 true를 반환한다.
interface Warning {
text : string
}
const formatErrorMessage = (value : string | Error | Warning) =>{
// text 속성을 가졌는지 확인 , Warning 타입으로 좁혀짐
if('text' in value) {
}
}
• 변수의 타입을 좁히는데 사용되는 특별한 유형의 함수
• 타입 가드 함수는 "{ paramter } is { type }"
형태로 정의되는것이 type predicate다.
- 모든 타입 가드는 이 형태를 따른다.
const formatErrorMessage =
(value : null | undefined | string | Error | Warning) => {...}
// boolean값을 가지지만, string 이라고 단정 지을 수 없음
const isString = (value : any) : boolean =>
typeof value === 'string'
위와 같이 인자를 받아서 타입을 반환해줄 때,
첫번째 함수와 같이 boolean을 리턴해주게 된다면,
typescript는 bool
값이 무엇을 의미하는지 알 수 없다.
boolean
값을 리턴하는대신
반환 타입에 "파라미터(이름)은 문자열입니까?" 라는 질문에 대한 답을 반환한다고 해야한다.
// string 지정
const isString = (value : any) : value is string =>
typeof value === 'string'
if(isString(value)) {
return prefix + value
}
위와 같이 파라미터에 대한 타입을 확인하도록 작성하여 타입가드를 이용할 수 있다.
함수 선언식은 함수를 선언하고 해당 함수의 이름을 사용하여 호출할 수 있는 방식입니다.
함수가 선언된 위치에 상관없이 코드 내 어디서든 호출이 가능하며, 호이스팅에 영향을 받습니다.
function add(a, b) {
return a + b;
}
// 함수 호출
const result = add(3, 5);
함수 표현식은 변수에 함수를 할당하는 방식으로 함수를 정의합니다.
변수에 할당된 위치 이전에 함수를 호출하면 에러가 발생합니다. 함수 표현식은 호이스팅에 영향을 받지 않습니다.
const add = function(a, b) {
return a + b;
};
// 함수 호출
const result = add(3, 5);
두 방식 모두 함수를 정의하고 호출하는 데 사용되지만, 함수 선언식은 호이스팅에 영향을 받고 함수 표현식은 그렇지 않다는 점에서 차이가 있습니다.
함수 표현식은 주로 변수에 할당되어야 하는 상황이나 익명 함수를 사용해야 할 때 유용합니다.