인터페이스는 공부하고 나니 일종의 타입자체를 만드는?? 그런 개념이라고 생각이 들었다.
일단 interface Name {} 의 형식으로 선언한다. 그 후 변수명과 해당 변수의 타입을 선언하고
객체에 인터페이스를 할당하면 선언한 변수는 필수로 들어가야한다.
Test 는 number와 name이 있어야하는 인터페이스인데 name이 없으므로 에러가 발생한다.
변수명에 ? 를 붙이면 있어도 되고 없어도 되는 변수로 인식을 하기 때문에 name이 없어도 에러가 나지않는다.
만약 name이라는 변수가 있을경우에는, string의 타입을 따라야한다.
인터페이스의 값은 객체와 마찬가지로 재할당이 가능하다. 다만 readonly 속성을 부여하면 읽기 전용이 되어서 재할당이 불가능하다.
인덱스 시그니쳐라는 기능을 사용하여 key 타입과 value 타입을 지정해 놓으면 해당 규격에 맞는 값들을 여러개 할당할 수 있다.
이때 인덱스 시그니쳐의 key는 string, number, symbol, Template literal 의 타입만 지정이 가능하다.
또한 리터럴 타입을 지정해준다음 타입자리에 넣으면 해당 리터럴타입의 영역 안에서만 할당할 수 있다.
인터페이스에는 함수도 정의가 가능하다. 매개변수와 리턴타입을 정의해주고 인터페이스에서 꺼낸 함수를 정의하면
리턴타입이 생략이 가능하다.