// 例: 型名は違うが、構造は一緒
type Human = {name: string; age: number};
type Person = {name: string; age: number}
let message: string = "hello";
let mix: string | number = message;
interface Human {
name: string;
age: number;
greeting(message: string): void;
}
class Developer implements Human {
constractor(public name: string, public age: number, experience: number)
greeting(message: string){
console.log("hello");
}
}
const tmpDeveloper = {
name: "Quill",
age: 38,
experience: 3,
greeting(message: string){
console.log(message);
}
}
// 構造が一緒なので代入することができる
const user: Human = new Developer("Quill", 38, 3);
// これも構造が一緒なので代入することができる
const user: Human = tmpDeveloper;
// 代入時、直接プロパティを書くとexperienceの所でエラーが出る
// experienceが余計なプロパティだからだ
const user: Human = {
name: "Quill",
age: 38,
experience: 3,
greeting(message: string){
console.log(message);
}
}
interface Human {
readonly name: string;
age: number;
greeting(message: string): void;
}
class Developer implements Human {
constractor(public name: string, public age: number, experience: number)
greeting(message: string){
console.log("hello");
}
}
const tmpDeveloper = {
name: "Quill",
age: 38,
experience: 3,
greeting(message: string){
console.log(message);
}
}
const user: Human = tmpDeveloper;
user.name = "aaa"; // readonlyになっているためエラーになる
let developer: Human = new Developer("Quill", 38, 3);
developer.name = "aaaa" // readonlyになっていないためエラーにならない。