JS는 모듈이라는 개념이 없던 프로그래밍 언어이다.
파일별로 변수나 함수를 구분해서 정의하더라도 기본적으로 모두 전역 유효 범위를 갑는 것이 JS의 특징이다.
애플리케이션의 코드가 많아 질수록 이름이 서로 출돌하지 않게 유일한 변수나 함수 이름을 고민할 필요가 있다.
Common.js
브라우저와 브라우저 이외의 환경인 서버, 데스크톱에서도 JS를 할용하기위해 고안된 스펙이자 그룹이다.
Node.js에서 가장 활발하게 사용되고 있는 스펙
// math.js
function sum(a, b) {
return a + b;
}
module.exports = {
sum
};
// app.js
const math = require('./math.js');
console.log(math.sum(1, 99)); // 100
// math.js
function sum(a, b) {
return a + b;
}
export { sum }
// app.js
import { sum } from './math.js';
console.log(sum(1, 99)); // 100
// math.js
function sum(a, b) {
return a + b;
}
export default sum;
import sum from './math.js';
console.log(sum(1, 99)); // 100
// math.js
function sum(a, b) {
return a + b;
}
export { sum }
// app.js
import { sum as add } from './math.js';
console.log(add(1, 99)); // 100
특정 파일에서 내보낸 기능이 많아 import 구문으로 가져와야 할 것이 많다면 * 키워드를 사용하여 편리하게 가져올 수 있다.
import * as ... from 키워드를 통해 가지고 온 my는 네임스페이스, 객체라고 생각하면 된다.
// math.js
function sum(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
function divide(a, b) {
return a / b;
}
export { sum, subtract, divide }
// app.js
import * as my from './math.js';
console.log(my.sum(1, 99)); // 100
console.log(my.subtract(100, 99)); // 1
console.log(my.divide(99, 1)); // 99
특정 파일에서 다른 파일이 가져다 쓸 기능을 내보낼 때 사용하는 키워드
변수, 함수, 클래스에 모두 사용할 수 있다.
선언과 동시에 앞쪽에 export를 일일이 붙여 내보낼 수 있고, 맨 아래 한번에 여러개의 변수, 함수, 클래스 등을 내보낼 수 있다.
const pi = 3.14;
const sayHi = () => {
return 'hi'
}
class Person {
...
}
export { pi, sayHi, person }
export const pi = 3.14;
export const sayHi = () => {
return 'hi'
}
export class Person {
...
}
// introduce.ts
interface Me {
name: string;
age: number;
}
export { Me }
// app.ts
import { Me } from 'introduce.ts'
const me: Me = {
name: 'jonghyun',
age: 99,
}
아래 코드는 util.ts파일에 num이라는 변수를 선언하고 초깃값으로 10을 할당해주었다.
app.ts파일에서 a변수를 선언한 후 num을 할달하더라도 타입스크립트에서는 정상적으로 인식한다.
다른 파일에 선언된 변수들이 모두 타입스크립트의 모듈 관점에서 전역으로 등록되어 있기 때문에 같은 이름으로 함수나 타입 별칭 등 재선언이 불가능한 코드를 작성하면 에러가 발생한다.
var나 interface 등 재선언이나 병합 선언이 가능한 코드는 별도로 에러가 표시되지 않는다.
// util.ts
var num = 10;
//app.ts
var a = num;
// introduce.ts
interface Me {
name: string;
age: number;
}
export { Me }
// app.ts
import type { Me } from 'introduce.ts'
const me: Me = {
name: 'jonghyun',
age: 99,
}
// introduce.ts
interface Me {
name: string;
age: number;
}
function logMyName() {
console.log('jonghyun');
}
export { Me, logMyName }
// app.ts
import { type Me, logMyName } from 'introduce.ts'
const me: Me = {
name: 'jonghyun',
age: 99,
}
// ./me/name.ts
interface Name {
name: string;
}
export { Name }
// ./me/age.ts
interface Age {
age: number
}
export { Age }
// app.ts
import { Name } from './me/name'
import { Age } from './me/age'
var name: Name = {name: 'jonghyun'};
var age: Age = {age: 99};
// ./me/index.ts
export { Name } from './me/name'
export { Age } from './me/age'
// app.ts
import { Name, Age } from './me'
var name: Name = {name: 'jonghyun'};
var age: Age = {age: 99};
출처: 쉽게 시작하는 타입스크립트