static-checking: typescript은 프로그램이 실행되기 전에 검사과정을 거친다.
typed superset of javascript
const message = 'Abstract Study'
//1. 첫번째
message.toLowerCase()
//2. 두번째
message()
1번을 실행시키면 모두 lowercase 로 출력이 된다, 하지만 2번을 실행시키면 에러가 뜬다. message는 함수가 아니기 때문이다. 이런 에러를 방지하기 위해서 타입스크립트를 쓴다.
string 이나 number 등 몇몇 값 들은 typeof 를 사용해서 어떠한 타입인지 알아낼 수 있지만, function은 typeof 로 타입 값을 찾을 수 없음.
const message = 'hello!';
message();
This expression is not callable.
Type 'String' has no call signatures.
ex1)
new Date() returns date
Date() returns string
ex2) Readonly Properties
interface Point {
readonly x: number;
readonly y: number;
}
let p1: Point = { x: 10, y: 20}
p1.x = 5;// error!
cannot assign to 'x' because it is a read-only property
let a: number[] = [1,2,3,4]
let ro: ReadonlyArray<number> = a
ro[0] = 12; // error
Index signature in type "readonly number[]' only permits reading
readonly vs const
best way to remember readonly vs const?
interface ClockInterface{
currentTime: Date;
}
class Clock implements ClockInterface{
currentTime: Date = new Date()
constructor(h:number, m: number){
}
}
interface Dimension{
length: number;
circum: number;
}
abstract class Shape{
abstract dimensions() : Dimensions;
draw() : void{
}
}
class Circle extends Shape {
constructor() {
super();
}
public dimensions(): Dimensions {
const dim: Dimensions = {
radius:0,
circum:0,
}
return dim;
}
}