let userError:object;
userError = {
    name: "cloer",
    age: 10    
};
// console.log(user.name)
// Error: Property 'name' does not exist on type 'object'.
type Score = 'A'|'B'|'C'|'D';
interface User {
    name: string;
    age: number;
    gender?: string; //optional
    readonly birthYear: number;
    [grade:number]: Score
};
let user:User = {
    name:'cloer',
    age:10,
    birthYear: 2012
};
user.gender = 'male';
// user.birthYear = 2022 // Error
user[1]='A';
user[2]='B';
// user[3]='E' // Error
console.log(user);
// Function interface
interface Add{
    (num1:number,num2:number):number
}
const add: Add = (x,y)=>{
    return x+y
}
// Class interface
interface Vehicle{
    color:string;
    speed:number;
    start():void;
}
// interface extends
interface Car extends Vehicle{
    wheels:number;
    brand:string;
}
// class implements
class Bmw implements Car{
    color;
    speed;
    readonly brand = 'bmw';
    wheels = 4;
    constructor(c:string, s:number){
        this.color = c;
        this.speed = s;
    }
    start(){
        console.log('start')
    }
}
const myCar = new Bmw('green',200);
console.log(myCar)
myCar.start()