const employee = {
name: "이정환",
age: 27,
position: "developer",
work() {
console.log("일함");
},
};
class Employee{
// 필드
name; // ❌오류
age; // ❌오류
position; // ❌오류
}
암시적으로 any타입이 할당되어 오류 발생
이전에 겪은 비슷한 오류 : 함수의 매개변수의 타입이 지정되지 않은 경우
※ 참고: 오류가 나도 상관없는 경우 ※
tsconfig.json설정에서
"noImplicitAny": false
추가 변경{ "compilerOptions": { "target": "ESNext", "module": "ESNext", "outDir": "dist", "strict": true, "moduleDetection": "force", "allowJs": true, "noImplicitAny": false // 추가 }, "ts-node": { "esm": true }, "include": ["src"] }
이 옵션은 웬만하면 건드리지 않는게 좋다..
class Employee {
// 필드
name?: string;
age?: number;
position?: string;
}
class Employee {
// 필드
name?: string = "";
age?: number = 0;
position?: string = "";
}
class Employee {
// 필드
name: string;
age: number;
position: string;
// 생성자
constructor(name: string, age: number, position: string) {
this.name = name;
this.age = age;
this.position = position;
}
}
class Employee {
// 필드
name: string;
age: number;
position: string;
// 생성자
constructor(name: string, age: number, position: string) {
this.name = name;
this.age = age;
this.position = position;
}
// 메서드
work() {
console.log("일함");
}
}
const employeeB = new Employee("이정환", 27, "개발자");
console.log(employeeB); // Employee { name: '이정환', age: 27, position: '개발자' }
위에서 작성한 코드를 보면 다음과 같이 class가 타입으로 추론된 것을 볼 수 있다.
다음과 같이 객체를 만들 수 있다.
class Employee {
// 필드
name: string;
age: number;
position: string;
// 생성자
constructor(name: string, age: number, position: string) {
this.name = name;
this.age = age;
this.position = position;
}
// 메서드
work() {
console.log("일함");
}
}
const employeeC: Employee = {
name: "",
age: 0,
position: "",
work() {},
};
class Employee {
// 필드
name: string;
age: number;
position: string;
// 생성자
constructor(name: string, age: number, position: string) {
this.name = name;
this.age = age;
this.position = position;
}
// 메서드
work() {
console.log("일함");
}
}
class ExecutiveOfficer extends Employee {
// 필드
officeNumber: number;
// 생성자
constructor(
name: string,
age: number,
position: string,
officeNumber: number
) {
super(name, age, position);
this.officeNumber = officeNumber;
}
}
※ 참고: super 누락시 ※
자바스크립트에서는 super를 사용하지 않아도 문제 없으나 타입스크립트에서는 오류가 발생한다.
→ 자바스크립트에서 사용할때보다 비교적 더 안전함