TypeScript
TypeScript 타입스크립트의 함수, 타입단언
wlals5855
2024. 9. 12. 17:23
⭐ 타입스크립트의 함수
- 함수의 선언과 호출
- 매개변수와 반환 값에 타입 지정 가능
function greet(name: string): string {
return `Hello ${name}`;
}
✔️ 함수에 타입 별칭을 사용하는 경우
- 화살표 함수의 체계를 사용
type ArrowFuncType = (name: string) => string;
const arrowFunc: ArrowFuncType = (name) => {
return `Hi ${name}`
}
console.log(arrowFunc('선하영'));
console.log(arrowFunc('지수민'));
✔️ 선택적 매개변수와 기본 매개변수
✅선택적 매개변수
- 함수 호출 시 생략 가능
- 변수명 뒤에 ? 작성
✔️기본 매개변수
- 기본값을 할당
- 함수 호출 시 생략하는 경우에 기본값을 자동 할당
- 매개변수명 = '기본값'
function select(name?: string, greeting: string = '안녕') {
if (name) {
console.log(`${greeting}, ${name}`);
} else {
console.log(`${greeting}, guest`);
}
}
select(); // 안녕, guest
select('이승아'); // 안녕, 이승아
select('반가워'); // 안녕, 반가워****
select(undefined, '반가워') // 반가워, guest
select('이도경', '반가워'); // 반가워, 이도경
✅ 선택적 매개변수와 기본 매개변수 사용 시
- 선택적 매개변수는 반드시 필수 매개변수(인자로 전달) 뒤에 작성
- 기본 매개변수는 필수와 선택적 매개변수 양쪽에 작성 가능 (어디든)
- 기본 매개변수가 앞서는 경우 생략하려면 반드시 undefined를 전달
✔️ Rest(나머지) 매개변수
- 함수에 전달하는 여러 개의 매개변수를 그룹화하여 배열로 전달하는 기능
- ...연산자(spread 연산자)를 사용하여 매개변수명 앞에 사용
function sum(a: number, b: number, ...c: number[]) {
return c.reduce((c1, c2) => c1 + c2, 0); // c1 += c2
}
console.log(sum(1, 2, 3, 4, 5)); // 12
console.log(sum(1, 2)); // 0
console.log(sum(1, 2, 10, 20, 30)); // 60
✔️ Rest 매개변수의 주의점
- 항상 매개변수 리스트의 마지막에 위치
- 타입 명시를 배열로 작성
function sum(a: number, b: number, ...c: number[]) {
return c.reduce((c1, c2) => c1 + c2, 0); // c1 += c2
}
console.log(sum(1, 2, 3, 4, 5)); // 12
console.log(sum(1, 2)); // 0
console.log(sum(1, 2, 10, 20, 30)); // 60
✔️ Rest 매개변수의 주의점
- 항상 매개변수 리스트의 마지막에 위치
- 타입 명시를 배열로 작성
⭐ 타입 단언(Type Assertion)
- 개발자가 타입스크립트 컴파일러 보다 해당 값의 타입의 주도권을 가지는 방법
- 컴파일러에게 '이 데이터의 타입을 내가 지정한 차입으로 간주해라!'라는 지시
✔️ 타입 단언 방법
- as 키워드를 사용
let someValue = 'this is a string';
// someValue = true;
let length = someValue.length; // length 속성의 경우 문자열, 배열에서 주로 사용
console.log(length); // 17
✅ 타입 단언을 활용하는 예시
- 웹 개발에서 DOM 요소를 조작할 때, 특정 DOM 요소를 구체적인 HTMLElement 타입으로 단언
- ts가 자동으로 해당 DOM 요소의 정확한 타입을 추론할 수 없다
document.addEventListener('DOMContentLoaded', () => {
// 버튼요소 가져오기
const button = document.getElementById('myButton');
// button.disabled = true;
// >> 'button'은(는) 'null'일수 있습니다.
//
if (button) {
button.disabled = true;
// : bool속성인 disabled 속성은 버튼 태그에만 존재
}
});
// #
const jsonString = '{"name": "LSA", "age": 30, "hobby": "exercise"}';
const userData = JSON.parse(jsonString);
console.log(userData);
}
- 웹 문서에 이벤트를 등록하여
DOM 구조가 생성되면 두번째 인자의 화살표 함수를 실행 - DOM 요소에 bool 속성 지정
요소.bool속성
요소.bool속성 = true; 와 동일 - HTML의 모든 요소는 HTMLElement라는 TS 내장 타입에 속함
버튼 요소: HTMLButtonElement
DIV 요소: HTMLDivElement
✅ JSON 문자열
const jsonString = '{"name": "LSA", "age": 30, "hobby": "exercise"}';
interface IUser {
name: string;
age: number;
}
const userData = JSON.parse(jsonString) as IUser;
console.log(userData);
}