static types : 개발 중간에 타입을 확인(ts)
dynamic types : 런타임 후 타입을 확인(js)
typescript는 기본적으로 javascript의 자료형과 다른 type을 추가적으로 제공한다.
let isDone:boolean = false;
// let isNotOk:boolean = new Boolean(true); //error
${}
형태 사용//primitive 값을 담아서 사용
console.log(Symbol('foo')=== Symbol('foo'));//false
//고유하고 수정불가능한 값으로 만들어준다
//접근 제어용으로 사용
const sym = Symbol();
const obj = {
[sym]:"value"
};
obj[sym]
null :무언가 있는데 사용할 준비가 덜 된 상태
//런타임 후 typeof object
undefined : 준비가 안 된 상태
//object에 property가 없을 때도 undefined
자체로 그다지 유용하지 않다 둘다 소문자만 존재한다.
설정을 하지 않으면 undefined와 null은 다른 모든 타입의 서브타입으로 존재한다. 따라서, 컴파일 옵션에서 --stricNullChecks
를 사용하면, null, undefined, void는 자신들에게만 할당할 수 있게 된다
이 경우에 할당을 하려면 union type을 이용해야함
let union:string | null = null;
union = 'Mark'
type guard : 코드를 작성할 때 컴파일러가 타입을 올바르게 추론할 수 있도록 에러를 예방하는 방법
object literal type :const objc:object = {name:"mark"};
let list:(number|string)[] = [1, 2, 3,'4']; //더 많이 사용
let list_1:Array<number> = [1,2,3]
let x: [string,number];
x = ['hello', 39] //항상 순서 타입 길이 일치해야함
const person: [string, number] = ['mark', 39];
nolmplicitAny
function returnAny(message:any):any{
console.log(message);
}
const any1 = returnAny("아무거나 리턴")
any1.toString();
let looselyTyped: any ={};
//any는 개체를 통해 전파, 타입 안전성을 잃을 수 있다
const d = looselyTyped.a.b.c.d;
declare const maybe: unknown;
const aNumber: number = maybe; //error
//타입 지정
if(maybe === true){
const aBoolean: boolean = maybe;
const aString:string = maybe;//error, 여기선 maybe는 boolean 타입!
}
if(typeof maybe === 'string'){
const aString:string = maybe;
}
좀더 이해가 필요
function error(message:string): never{
throw new Error(message);
}
function fail(){
return error("failed");
}
let a:string = 'hello';
if(typeof a !== 'string'){
a;//never type
}
declare const a:string |number;
if(typeof a !== "string"){
a;//number type
}
좀더 이해가 필요
//이 함수의 return 값을 사용하지 않겠다.
function returnVoid(message:string):void{
console.log(message)
return undefined;
}
//r은 void type
const r = returnVoid('리턴이 없다...');
좀더 이해가 필요