typescript 선택적 매개변수와 속성

cptkuk91·2022년 12월 16일
1

TypeScript

목록 보기
11/13
post-thumbnail
//type AddFunction = (a: number, b: number) => number;
interface AddFunction {
	(a: number, b: number): number;
}

let add: AddFunction;

// add: AddFunction이기 때문에 아래 n1: number를 string으로 바꿀 경우 작동하지 않는다.
add = (n1: number, n2: number) => {
	return n1 + n2;
};

interface Named {
	readonly name?: string;
    outputName?: string;
    // ?: string을 통해서 선택적으로 속성을 적용시킬 수 있다.
    // 만약 outputName: string 경우 아래 class Person에 반드시 outputName 속성을 추가해야 작동한다. Person implements Greetable이기 때문에, 하지만 ?: string을 통해서 해결할 수 있다.
}

interface Greetable extends Named {
	greet(phrase: string): void;
}

// Greetable에서 interface를 확장했을 때 Greetable에 name이 추가된 상태이기 때문에, class Person 내 name: string설정해야 합니다.
class Person implements Greetable {
	name?: string;
    age = 30;
    
    constructor(n?: string){
    	// 선택적 사용자를 통해 조건문을 사용할 수 있다.
        if(n){
        	this.name = n;
        }
    }
    
    greet(phrase: string) {
    	if(this.name){
        	console.log(phrase + " " + this.name);
        } else {
        	console.log("Hello No Provide Name");
        }
    }
}

let user1: Greetable
user1 = new Person();

user1.greet("Hello World I am");
console.log(user1);

?: 선택적 매개변수를 뜻한다.
?: string을 통해서 선택적으로 속성을 적용시킬 수 있다.
만약 outputName: string 경우 아래 class Person에 반드시 outputName 속성을 추가해야 작동한다. Person implements Greetable이기 때문에, 하지만 ?: string을 통해서 해결할 수 있다.

반대로 class Person에서 implements Greetable 사용했기 때문에, name?: string을 사용할 경우 Greetable에서 선택적 사용자가 아니기 때문에, 선택적으로 사용할 수 없다. 만약 class Person에서 name?: 선택적으로 사용하고 싶다면, Greetable에서 name?: string 선택적으로 바꿔주면 된다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글