Trabalhando com Módulos - TypeScript
Exportando componentes de um módulo
Suponha que temos no projeto o arquivo devices.ts
export interface Device {
name: string;
}
export class Phone implements Device {
name: string;
constructor(n: string) {
this.name = n;
}
}
export function call(phone: Phone): void {
console.log("Make a call by", phone.name);
}
Para que classes, interfaces e funções sejam visíveis externamente, elas são definidas com a palavra-chave export
Mas poderíamos exportar todas as entidades de outra forma:
interface Device {
name: string;
}
class Phone implements Device {
name: string;
constructor(n: string) {
this.name = n;
}
}
function call(phone: Phone): void {
console.log("Make a call by", phone.name);
}
export { Device, Phone, call };
Importando Módulos
Para utilizar um módulo na aplicação, é necessário importá-lo usando o operador import
Phone
devices.ts
import { Phone, call } from "./devices";
let iphone: Phone = new Phone("iPhone X");
call(iphone);
Após a palavra import
from
devices.js
lib
"./lib/devices"
Aliases
Ao exportar e importar módulos, é possível atribuir um alias a um componente do módulo usando o operador as
Por exemplo, definindo um alias para um componente na importação:
import { Phone, call as makeCall } from "./devices.js";
let iphone: Phone = new Phone("iPhone X");
makeCall(iphone);
Assim, neste caso, a função call()
makeCall()
call()
Também é possível definir um alias ao exportar o componente:
interface Device {
name: string;
}
class Phone implements Device {
name: string;
constructor(n: string) {
this.name = n;
}
}
function call(phone: Phone): void {
console.log("Make a call by", phone.name);
}
export { Device, Phone, call as makeCall };
Em seguida, o componente é importado através de seu alias:
import { Phone, makeCall } from "./devices.js";
let iphone: Phone = new Phone("iPhone X");
makeCall(iphone);
Importando o Módulo Inteiro
É possível importar todo o módulo de uma vez:/p>
import * as dev from "./devices.js";
let iphone: dev.Phone = new dev.Phone("iPhone X");
dev.makeCall(iphone);
Nesse caso, o módulo é importado através do alias dev
Exportação Padrão
A exportação padrão permite definir um tipo que será importado do módulo por padrão. Por exemplo, vamos adicionar um novo módulo smartwatch.ts
export default class SmartWatch {
constructor(private model: string) {}
printModel() {
console.log(`Model: ${this.model}`);
}
}
A palavra-chave default
SmartWatch
import SmartWatch from "./smartwatch.js";
let watch: SmartWatch = new SmartWatch("Apple Watch");
watch.printModel();
Podemos também atribuir um nome diferente ao componente exportado por padrão:
import Watch from "./smartwatch.js";
let watch: Watch = new Watch("Apple Watch 2");
watch.printModel();