let id: number = 3;
let myName: string = "Sean"
let isHungry: boolean = true
와 같이 선언이 가능하며,
let x: any = "Hello"
x = true
let age: number
age = 28
위와 같이 type 을 any로 지정 해 주면 처음 선언시 "Hello"라는 string type을 초기값으로 주었지만 밑에 x = true 라고 값을 다시 줘도 에러가 뜨지 않는다.
let ids: number[] = [1,2,3,4,5]
ids.push('Hello') //에러 생성
와 같은 상황에서, ids 라는 Array 를 Array of number 로 선언 해 주었기 때문에 hello 라는 string을 push 할 수 없다.
let tuple: [string, number, boolean, any] = ['Sean', 3, false, 10]
let tupleArray: [number, string][] = [
[1, "John"],
[2, "Sean"],
[3, "Logan"],
];
let unionExample: string | number = '30'
enum Direction {
Up,
Down,
Left,
Right
}
const students: {
id: number;
name: string;
} = {
id: 1,
name: "Sean",
};
2) 또는 object의 타입을 type 키워드를 통해 선언 해 주고, 그것을 object 의 타입으로 받아 올 수 있다.
type Students = {
id: number;
name: string;
};
const students2: Students = {
id: 1,
name: "Sean",
};
let pid: any = 2
let productId = <number>pid //JSX 문법과 헷갈릴 수 있으므로 아래와 같이 as 를 쓰는게 더 좋다
let prodId = pid as number
function addNum(x: number, y:number): number {
return x + y
}
x: number, y: number을 통해 파라미터들의 type을 꼭 정해 주어야 하며, 괄호 뒤에붙은 :number은 return value 의 type을 정한다.
아래와 같이 return value 가 없는 함수에는 :void 로 type을 정해준다.
(함수의 파라미터 또한 union 이나 다른 방식으로 타입 설정이 가능하다)
function log(text : string | number) : void {
console.log(text)
}
type Example = number | string //가능
const example: Example = 1
interface Example = number | string //불가능
interface User {
readonly id: number; //readonly를 통해 다른 value를 assign할 수 없게 한다.
name: string;
age?: number; // ? 를 통해 age 는 optional로 설정한다.
};
const user: User = {
id: 1,
name: "Sean" // age가 없지만 ?를 통해 optional property가 있으므로 에러가 안뜬다.
};
user.name = "Tommy" // 가능
user.id = 3 // interface의 readonly 키워드 때문에 불가능
interface MathFunc {
(x: number, y:number) : number
}
const add: MathFunc = (x: number, y: number): number => x + y
const subtract: MathFunc = (x: number, y: number): number => x - y
class Person {
private id: number; //private == access modifier
name: string;
constructor(id: number, name: string) {
this.id = id;
this.name = name;
}
register() {
return `${this.name} is registered`;
}
}
const sean = new Person(1, "Sean Mendez");
interface PersonInterface {
id: number
name: string
register(): string
}
로 interface를 설정 해 주고,
class Person implements PersonInterface {
class Player extends Person {
position: string
constructor(id:number, name:string, position:string){
super(id, name)
this.position = position
}
}
const footBall = new Player(3, 'Tommy', 'Line Back')
function getArray(items: any[]): any[] {
return new Array().concat(items)
}
let numArray = getArray([1,2,3,4])
let strArray = getArray(['sean','tommy','john','mike'])
numArray.push('hihi')
function getArray<T>(items: T[]): T[] {
return new Array().concat(items)
}
let numArray = getArray<number>([1,2,3,4])
let strArray = getArray<string>(['sean','tommy','john','mike'])