: number(실수), string, boolean, object, array, tuple, enum(열거형), any 등
- tuple 같은 경우는 python 같은 언어에서는 있는 데이터 형태이지만 JS에는 기본적으로 내재되어 있지 않은 데이터 타입이다. TS는 tuple 데이터 타입 또한 사용할 수 있게 해준다.
- tuple이란 길이와 데이터 타입이 정해져서 그 형식을 벗어날 수 없는 배열이다.
- tuple도 push는 할 수 있다. 나머지는 거의 안된다고 보면 된다.
- enum은 서로 관련된 상수들을 편리하게 선언하기 위한 목적으로 만들어진 데이터 타입이다. 예를 들어 로그인 시 접속자의 역할을 코드화해서 관리할 경우, 일반 user는 100, 판매자는 200, amdin은 300이라고 쳤을 때 이를 편하게 후루룩 처리해버릴 수 있다.
- any는 말그대로 어떤 데이터 타입이든 올 수 있다는 뜻이다. 따라서 유연성이 높지만 TS의 장점을 전혀 살리지 못하는 데이터 타입이다. 바닐라 JS와 다를 바 없기 때문이다.
var var1: number = 0; // number
var var2: string = "예시"; //string
var var3: bolean = true; //boolean
//object(객체 형식 명시시에는 반점(,)이 아닌 세미콜론(;)을 사용해야 한다)
var var4: {
nickname: string;
age: number;
} = {
nickname: "0=2",
age: 3700
}
//array
var var5: string[] = ["spring", "summer", "fall", "winter"];
var var6: any[] = ["Me", 3700, true];
//tuple
var var7: [string, number, boolean] = ["Me", 3700, true];
//enum
enum role {user=100, seller=200, admin=300}; //문자열 할당도 가능
enum role {user, seller, admin}; //-> 순서대로 0,1,2의 인덱스값을 부여받게 된다.
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;
}
}
function combine(input1: number | string, input2: number | string){
// return input1 + input2
let result;
if(typeof input1 === "number" && typeof input2 === "number"){
result = input1 + input2;
} else {
result = input1.toString() + input2.toString();
}
return result;
}
const combinedAges = combine(30, 26);
console.log(combinedAges); // 56
const combinedNames = combine("Anna", "Max");
console.log(combinedNames); //AnnaMax
function combine(input1: number | string, input2: number | string, resultConversion: "as-number" | "as-text"){
let result;
if(typeof input1 === "number" && typeof input2 === "number"){
result = input1 + input2;
} else {
result = input1.toString() + input2.toString();
}
if(resultConversion === "as-number"){
return +result;
} else {
return result.toString();
}
}
const combinedAges = combine(30, 26, "as-number");
console.log(combinedAges); // 56(number)
const combinedStringAges = combine("30", "26", "as-number");
console.log(combinedStringAges); // 3026(number)
const combinedNames = combine("Anna", "Max", "as-text");
console.log(combinedNames); //AnnaMax(string)
type combinable = number | string; //타입 앨리어스
type conversionDescriptor = "as-number" | "as-text"; //사용자 앨리어스
function combine(input1: combinable, input2: combinable, resultConversion: conversionDescriptor){
let result;
if(typeof input1 === "number" && typeof input2 === "number"){
result = input1 + input2;
} else {
result = input1.toString() + input2.toString();
}
if(resultConversion === "as-number"){
return +result;
} else {
return result.toString();
}
}
const combinedAges = combine(30, 26, "as-number");
console.log(combinedAges); // 56(number)
const combinedStringAges = combine("30", "26", "as-number");
console.log(combinedStringAges); // 3026(number)
const combinedNames = combine("Anna", "Max", "as-text");
console.log(combinedNames); //AnnaMax(string)
type User = { name: string; age: number };
const u1: User = { name: 'Max', age: 30 };
function add(n1: number, n2: number): number{
return n1 + n2;
}
function printResult(num: number): void{
console.log("result: " + num);
}
printResult(add(1,3)); // return 4
console.log(printResult(add(1,3))) // undefined
function resUndefined: undefined{
return;
}
let combinedValues: Fuction;
combinedValues = add;
console.log(combinedValues(2,5)); // 7
combinedValues = printResult;
console.log(combinedValues(2,5)); // undefined -> 매개변수를 받지 못하는 함수이므로
let combinedValues = (a: numbr, b: number) => number;
combinedValues = add;
combinedValues = printResult; // error! -> number 타입의 두 매개변수가 없고 number를 반환하지도 않기 때문에
function addAndHandle(n1: number, n2: number, cb: (num: number) => void){
const result = n1 + n2;
cb(result);
}
addAndHandle(10, 20, (result) => {
console.log(result);
return result; // no error but nothing returns;
})
let userInput: unknown;
let userName: string;
userInput = 5; //OK
userInput = "Max"; //OK
userInput = userName; // error
if(typeof userInput === "string"){ // OK
userName = userInput;
}
function generateError(message: string, code: number): never{
throw {message: message, errorCode: code};
}
generateError("An error occured!", 500);