const user:string = 'DL' console.log(user); // user라는 변수 뒤에 ':string'을 붙여 user는 string 타입임을 명시 const age: number = 24; console.log(age); // age 변수 뒤에 ':number'을 붙여 age number 타입임을 명시
function sum(x: number, y: number): number { return x + y; } sum(1, 2); //x와y 뒤에 콜론과 타입을 적어서 인자의 타입을 정의하고, 제일 뒤에 :number를 적어 // sum이라는 함수의 리턴값이 number타입임을 명시해준다. function sumArray(numbers: number[]): number { return numbers.reduce((acc, current) => acc + current, 0); } const total = sumArray([1, 2, 3, 4, 5]); // 인자를 숫자로만 이루어진 배열만 받게 하기
void
로 설정하면 됩니다.function returnNothing(): void { console.log('I am just saying hello world'); }
// Shape 라는 interface 를 선언합니다.
interface Shape {
getArea(): number; // Shape interface 에는 getArea 라는 함수가 꼭 있어야 하며 해당 함수의 반환값은 숫자입니다.
}
class Circle implements Shape {
// `implements` 키워드를 사용하여 해당 클래스가 Shape interface 의 조건을 충족하겠다는 것을 명시합니다.
radius: number; // 멤버 변수 radius 값을 설정합니다.
constructor(radius: number) {
this.radius = radius;
}
// 너비를 가져오는 함수를 구현합니다.
getArea() {
return this.radius * this.radius * Math.PI;
}
}
class Rectangle implements Shape {
width: number;
height: number;
constructor(width: number, height: number) {
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
}
const circle = new Circle(5);
const rectangle = new Rectangle(10, 5);
console.log(circle.radius);
console.log(rectangle.width);
const shapes: Shape[] = [new Circle(5), new Rectangle(10, 5)];
shapes.forEach(shape => {
console.log(shape.getArea());
});
public
으로 선언된 값은 클래스 외부에서 조회 할 수 있으며private
으로 선언된 값은 클래스 내부에서만 조회 할 수 있습니다. 따라서 아래 코드에서는 circle 의 radius 값은 클래스 외부에서 조회 할 수 있지만, rectangle 의 width 또는 height 값은 클래스 외부에서 조회 할 수 없습니다.
// Shape 라는 interface 를 선언합니다.
interface Shape {
getArea(): number; // Shape interface 에는 getArea 라는 함수가 꼭 있어야 하며 해당 함수의 반환값은 숫자입니다.
}
class Circle implements Shape {
// `implements` 키워드를 사용하여 해당 클래스가 Shape interface 의 조건을 충족하겠다는 것을 명시합니다.
constructor(public radius: number) {// public이 선언 되어서 가능
this.radius = radius;
}
// 너비를 가져오는 함수를 구현합니다.
getArea() {
return this.radius * this.radius * Math.PI;
}
}
class Rectangle implements Shape {
constructor(private width: number, private height: number) {
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
}
const circle = new Circle(5);
const rectangle = new Rectangle(10, 5);
console.log(circle.radius);
console.log(rectangle.width); // private라서 에러.
const shapes: Shape[] = [new Circle(5), new Rectangle(10, 5)];
shapes.forEach(shape => {
console.log(shape.getArea());
});
interface Person {
name: string;
age?: number; // 물음표가 들어갔다는 것은, 설정을 해도 되고 안해도 되는 값이라는 것을 의미합니다.
}
interface Developer {
name: string;
age?: number;
skills: string[];
}
const person: Person = {
name: '김코딩',
age: 20
};
const expert: Developer = {
name: '박해커',
skills: ['javascript', 'react']
};
console.log(person)
console.log(expert)
위의 코드에서 interface Person과 Delveloper의 중복(name,age)이 존재한다. 이를 extends
를 사용하여 간단하게 쓰기도 가능하다.
interface Person {
name: string;
age?: number; // 물음표가 들어갔다는 것은, 설정을 해도 되고 안해도 되는 값이라는 것을 의미합니다.
}
interface Developer extends Person { // extends로 확장가능
skills: string[];
}
const person: Person = {
name: '김사람',
age: 20
};
const expert: Developer = {
name: '김개발',
skills: ['javascript', 'react']
};
const people: Person[] = [person, expert];
console.log(people)
(출처)