타입스크립트 모듈은 선언과 코드를 모두 가지고 있음. 모듈은 글로벌 scope에서 실행되는게 아리나 자신만의 scope에서 실행됨. 모듈 안에서 변수, 함수, 클래스, 인터페이스를 선언하면 export
로 export하지 않는 이상 모듈 밖에서는 보이지 않음.
따라서 모듈에 있는 변수, 함수, 클래스를 사용하고 싶으면 import
로 가져오면됨.
아래는 Validator.ts
라는 모듈을 생성하고 거기에 Validator
라는 인터페이스를 선언했음.
export interface Validator {
isValid(s: string): boolean
}
이 모듈에서 export
키워드를 interface
키워드 뒤에 사용해서 이 인터페이스가 다른 모듈에서 사용할 수 있도록 했음. export
를 안써주면 Validator
인터페이스는 Validator.ts
모듈에서만 사용가능함.
아래처럼 export
할 수도 있음.
interface Validator {
isValid(s: string): boolean
}
export { Validator };
또한 아래처럼 Validator
를 StringValidator
로 이름을 바꿔서 export
도 가능함.
export { Validator as StringValidator };
모듈을 가져오려면 import
를 사용하면 됨. 아래는 Validator.ts
모듈을 사용하는 EmailValidator.ts
임.
import { Validator } from './Validator';
class EmailValidator implements Validator {
isValid(s: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(s);
}
}
export { EmailValidator };
모듈을 import 할때 아래처럼 이름을 바꿔서 가져올 수 있음.
import { Validator as StringValidator } from './Validator';
아래는 Types.ts
모듈에서 타입을 선언한 것임.
export type alphanumeric = string | number;
alphanumeric
타입을 Types.ts
에서 가져오려면 import type
을 쓰면됨.
import type {alphanumeric} from './Types';
타입스크립트 버전이 3.8 아래면 import
를 사용해야함.
import {alphanumeric} from './Types';
모듈에서 전부 가져오려면 아래처럼 하면됨.
*
로 싹다 가져오는거 지양하기.
// TestModule.ts
export let aacpc = 33;
// app.ts
import * as testm from './TestModule';
console.log(testm.aacpc);
// Output:
33
아래는 Validator.ts
모듈을 사용하는 ZipCodeValidator.ts
모듈임.
import { Validator } from './Validator';
class ZipCodeValidator implements Validator {
isValid(s: string): boolean {
const numberRegexp = /^[0-9]+$/;
return s.length === 5 && numberRegexp.test(s);
}
}
export { ZipCodeValidator };
EmailValidator
와 ZipCodeValidator
모듈을 아래와 같이해서 FormValidator.ts
에서 두 모듈을 싸서 export 할 수 있음.
// FormValidator.ts
export * from "./EmailValidator";
export * from "./ZipCodeValidator";
// app.ts
import * as formv from './FormValidator';
let email = 'john.doe@typescripttutorial.net';
let validator = new formv.EmailValidator();
let resultx = validator.isValid(email);
console.log(resultx);
// Output:
true
타입스크립트는 각각의 모듈이 하나의 default export를 할 수 있게 해줌. export를 default export로 만드려면 default
키워드를 사용하면 됨.
아래는 ZipCodeValidator
를 default export로 하는 예시임.
import { Validator } from './Validator';
export default class ZipCodeValidator implements Validator {
isValid(s: string): boolean {
const numberRegexp = /^[0-9]+$/;
return s.length === 5 && numberRegexp.test(s);
}
}
아래는 app.ts
에서 default로 export 된 ZipCodeValidator를 사용하는 예시임.
import ZipCodeValidator from './ZipCodeValidator';
let validator = new ZipCodeValidator();
let result = validator.isValid('95134');
console.log(result);
// Output:
true
default export
는 import 할때 {}없이 가져올 수 있음.
// test.js
let k; export default k = 12;
// some other file
import m from './test'; // default export 이기 때문에 원래 이름인 k대신에 m 사용 가능함.
console.log(m);
// Oupput:
12
- 타입스크립트 모듈은 선언과 코드를 둘 다 가질 수 있음
- 모듈에서 변수, 함수, 클래스, 인터페이스 등은 global scope에서 실행되는게 아니라 모듈의 scope에서 실행됨.
export
를 사용해서 변수, 함수, 클래스, 인터페이스, 타입등을 모듈에서 export 할 수 있음.import
를 통ㄹ해서 다른 묘듈의 exports들을 가져올 수 있음.