모든 요소에 readonly 속성을 타입에 추가할 수도 있다.
type age = number
type name = string
type Player = {
readonly name : Name,
age? : Age
}
const playerMaker = (name:string) : Player => ({name})
const allong = playerMaker("allong")
여기에서 allong.name = "las"
와 같이 name을 수정하려고 하면 typescript는 이것을 막게 된다. name은 읽기 전용의 속성이라고 명시했기 때문에
const numbers : readonly numbers[] = [1, 2, 3, 4]
따라서, 여기까지도 아무런 문제가 없으나,
numbers.push(1)
과 같은 코드를 작성하면 타입스크립트는 이를 허용하지 않는다. numbers라는 배열은 읽기 전용이라고 명시했기 때문이다. 'push'라는 것이 readonly numbers[]타입에 존재하지 않기 때문에.
const names : readonly string[] = ["1", "2"]
이런 읽기 전용의 배열이 있을 때, filter나 map은 사용할 수 있다. 이들은 배열을 변형시키지 않기 때문에. 하지만 push와 같은 메서드는 불변성을 유지하지 않기 때문에 사용이 금지된다.
Tuple은 array를 생성할 수 있게 하는데 최소한의 길이를 가져야 하고, 특정 위치에 특정 타입이 있어야 한다.
const player : [string, number, boolean] = ["allong", 1, true]
any는 타입스크립트의 보호장치들로부터 빠져나오고 싶을 때 사용하게 된다. any는 말 그대로 아무 타입이나 될 수 있다.
const a : any[] = [1, 2, 3, 4]
const b : any = true
a + b
any가 동반되지 않는다면 이런 코드는 일반적으로 타입스크립트에서 금지되는 코드이다. 하지만 위와 같이 any로 지정해주는 변수들은 타입스크립트의 보호장치들로부터 해방되어 기존 자바스크립트처럼 동작할 수 있게 된다.
일반적으로 any를 사용하는 것은 추천되지 않는다.