true or falsefalse'0'은 trueundefined, null 모두 falsetypeof를 했을 때 object를 반환하는 객체, 배열, 함수 등 모든 타입을 의미함const person:
name: string,
age: number;
hobbies: string[];
} = {
name: 'Semin',
age: 25,
hobbies: ['Coding', 'Running'],
} // bad
const product = {
id: 'abc1',
price: 12.99,
tags: ['great-offer', 'hot-and-new'],
details: {
title: 'Red Carpet',
description: 'A great carpet - almost brand-new!'
}
}
{
id: string;
price: number;
tags: string[];
details: {
title: string;
description: string;
}
}
TYPE[]: const numbers: number[] = [1, 2, 3];Array<TYPE>: const fruits: Array<string> = ['momo', 'darae', 'cherry'];const testArray = [1, 2, 3]; -> number[] 로 추론const readOnlyArray: readonly number[] = [1, 2, 3];push로 넣는 것은 tsc가 잡지 못함(예외라고 생각하면 ok)let info: [string, number];
info = ['typescript', 3] // 성공
info = [3, 'typescript'] // 실패 -> 순서가 맞지 않음
info = [3, 5] // 실패 -> 자료형이 맞지 않음
info = ['javascript', 1, 5] // 실패 -> 길이가 맞지 않음
let version: [2, number];
version = [2, 3] //성공
version = [3, 2] // 실패
| (파이프) 기호를 사용type Combinable = number | string;
// 변수 하나에 직접 할당 가능
let unionVariable: string | number;
unionVariable = "Hi";
unionVariable = 25;
unionVariable = true; // Error boolean은 허용되지 않음
Enum과 대체제에 관해서 -> [링크](추후 추가)
type Easing = "ease-in" | "ease-out" | "ease-in-out";
class UIElement {
animate(dx: number, dy: number, easing: Easing) {
if (easing === "ease-in") {
// ...
} else if (easing === "ease-out") {
} else if (easing === "ease-in-out") {
} else {
// 하지만 누군가가 타입을 무시하게 된다면
// 이곳에 도달하게 될 수 있습니다.
}
}
}
let button = new UIElement();
button.animate(0, 0, "ease-in");
button.animate(0, 0, "uneasy");
type diceResult = 1 | 2 | 3 | 4 | 5 | 6;
//
type Combinable = number | string;
type ConversionDescriptor = 'as-number' | 'as-text';
function combine(
input1: Combinable, //number | string,
input2: Combinable,//number | string,
resultConversion: ConversionDescriptor//리터럴 타입
) {
let result;
if (typeof input1 === "number" && typeof input2 === "number" || resultConversion === 'as-number') {
result = +input1 + +input2;
} else {
result = input1.toString() + input2.toString();
}
return result;
}
type User = { name: string; age: number };
const u1: User = { name: 'Max', age: 30 }; // this works!
function greet(user: { name: string; age: number }) {
console.log('Hi, I am ' + user.name);
}
function isOlder(user: { name: string; age: number }, checkAge: number) {
return checkAge > user.age;
}
type User = { name: string; age: number };
function greet(user: User) {
console.log('Hi, I am ' + user.name);
}
function isOlder(user: User, checkAge: number) {
return checkAge > user.age;
}
type Combinable = number | string;
type ConversionDescriptor = 'as-number' | 'as-text';
// function 키워드 + 파라미터와 함수 바디 한 번에
function combine1(
input1: Combinable, //number | string,
input2: Combinable,//number | string,
resultConversion: ConversionDescriptor//리터럴 타입
) {
let result;
if (typeof input1 === "number" && typeof input2 === "number" || resultConversion === 'as-number') {
result = +input1 + +input2;
} else {
result = input1.toString() + input2.toString();
}
return result;
}
// 익명함수 + 파라미터와 함수 바디 한 번에
const combine2 = (
input1: Combinable,
input2: Combinable,
resultConversion: ConversionDescriptor
) => {
...
}
// 익명함수 + 함수 시그니처 간단히
const combine3 : (a: Combinable, b: Combinable) => Combinable = () => {
//
}