[선언키워드][변수명]: [타입]
const name: string
속성(property) 갖고 있는 데이터 컬렉션.
c의 구조체와 유사
속성은 키와 값으로 표현되는데 값은 다시 js의 타입을 갖고있음
const kim = {
name: 'gildong',
age: 20,
hobby: ['movie', 'billiards'],
}
ts에는 특수한 타입 존재.
any: js와 같이 어떤 타입의 값도 받을 수 있는 타입.
any 타입의 객체는 어떤 타입의 변수에도 할당 가능.
이때문에 런타임 오류 일으킬 가능성 존재.
unknown: any처럼 어떤 타입도 할당 가능하지만, unknown 타입으로 선언된 변수에는 any 제외한 다른 타입으로 선언된 변수에 할당될 수 없다.
let variable: unknown
variable = true // boolean
variable = 1 // number
variable = 'string' // string
variable = {} // object
let variable: unknown
let anyType: any = variable
let booleanType: boolean = variable // error.
let numberType: number = variable // error.
unknown 타입으로 선언된 변수는 프로퍼티에 접근할 수 없으며, 메소드 호출할 수 없으며, 인스턴스 생성할 수 없다. 알려지지 않은 타입이기 때문.
let variable: unknown
// 모두 error
variable.foo.bar
variable[0]
variable.trigger()
variable()
new Variable()
never: never 타입의 변수에는 어떤 값도 할당 못함. 함수 리턴타입을 never로 지정하면 함수가 어떤 값도 반환하지 않는다는 뜻.
// interface
interface User {
name: string;
age: numner;
}
const user: User = {
name: 'kim',
age: 20,
}
// class
class User {
constructor(name: string, age: number) {}
}
const user: User = new User('kim', 20);
// 반환값이 any이기 때문에 arg에 string값 전달해도 반환 시 any가 됨.
function indentify(arg: any):any {
return arg;
}
// 제네릭 타입 사용하면 리턴되는 값의 타입은 함수 호출하는 시점의 인자로 넣은 타입으로 결정되도록 함.
function indentify<T>(arg: T): T {
return arg;
}