변수선언과 타입지정
타입을 지정해놓으면 값이 의도치 않게 변경될 경우 에러메세지를 띄워줍니다.
let name :string = 'kim'; // 문자열만 받음
let age :number = 25; // 숫자만 받음
// array 혹은 object
let name :string[] = ['kim', 'park'] // 문자열 요소인 배열만 받음
let age :{ age : number } = { age : number } // age에 대한 값에 숫자만 받음
string
, number
, boolean
, bigint
, null
, undefined
, []
, {}
등이 있습니다.
let name :string | number = 'kim' // 문자열, 숫자 둘 다 받을 수 있음
한 변수에 여러가지 타입의 데이터가 들어올 수 있다면 |
기호를 이용해 or 연산자를 표현할 수 있습니다.
type nameType = string | number;
let name :nameType = 'kim';
type 키워드를 이용해 타입을 변수처럼 담아서 사용할 수 있습니다.
type NameType = 'kim' | 'park';
let name :NameType = 'kim';
원하는 글자나 숫자를 입력하면, name 이라는 변수엔 앞으로 'kim' 또는 'park'만 들어올 수 있습니다.
function Func1(x :number) :number {
return x * 2
}
함수는 파라미터와 return 값에 타입지정이 가능합니다.
실수로 다른 타입이 파라미터로 들어오거나 return될 경우 에러를 발생시킵니다.
type Member = [number, boolean];
let john:Member = [100, false];
tuple
array 자료 안에 순서를 포함한 타입지정을 하고 싶으면 tuple 타입을 사용할 수 있습니다.
[ ] 안에 들어올 자료의 타입을 순서대로 적으면 됩니다.
type MyObject = {
name? : string,
age : number
}
let 철수 :MyObject = {
name : 'kim',
age : 50
}
object 타입도 정의가 너무 길다면 type 키워드로 변수에 담아 사용이 가능합니다.
특정 속성이 선택사항이라면 물음표를 기입할 수 있습니다.
만약 object 안에 어떤 속성이 들어갈지 아직 모른다면,
type MyObject = {
[key :string] : number,
}
이렇게 모든 키에 대한 타입지정이 가능합니다.
이런 방식을 index signature 이라고 합니다.
class Person {
name;
constructor(name :string){
this.name = name;
}
}
class에도 타입지정이 가능합니다.
다만, 중괄호 내에 미리 변수를 만들어놔야 생성자 안에서 this.name 처럼 사용이 가능합니다.