We use exports to share code between files. Default and named exports are two ways to do this simply.
Default exports vs named exports in Typescript
export default expression; export const name = value; export function func() {} export { name1, name2 };
Default export means the file exports one main thing.
Named exports let you export many things by name.
greet.export default function greet() { console.log('Hello!'); }
pi and a function area.export const pi = 3.14; export function area(radius: number) { return pi * radius * radius; }
name and age together.const name = 'Alice'; const age = 30; export { name, age };
In mathUtils.ts, add is the default export and multiply is a named export.
In main.ts, we import add without braces because it is default, and multiply with braces because it is named.
Then we use both functions and print their results.
// file: mathUtils.ts export default function add(a: number, b: number): number { return a + b; } export function multiply(a: number, b: number): number { return a * b; } // file: main.ts import add from './mathUtils'; import { multiply } from './mathUtils'; console.log(add(2, 3)); console.log(multiply(2, 3));
You can have only one default export per file but many named exports.
When importing a default export, you can choose any name you like.
When importing named exports, you must use the exact exported names or rename them with as.
Default export is for one main thing per file.
Named exports are for multiple things exported by name.
Use the right import style to match default or named exports.
Practice
default export and named exports in TypeScript?Solution
Step 1: Understand default export purpose
Default export is designed to export a single main value from a file, like a main function or class.Step 2: Understand named exports purpose
Named exports allow exporting multiple values by their names, so you can import only what you need.Final Answer:
Default export allows exporting one main value per file, named exports allow multiple exports by name. -> Option BQuick Check:
Default export = one main, Named exports = multiple [OK]
- Confusing import syntax for default and named exports
- Thinking default export can export multiple items
- Assuming named exports require default keyword
utils.ts?Solution
Step 1: Recall default import syntax
Default exports are imported without curly braces using the syntax:import name from 'module'.Step 2: Check options for correct syntax
import utils from './utils'; matches this syntax exactly, importing the default export asutils.Final Answer:
import utils from './utils'; -> Option AQuick Check:
Default import has no braces [OK]
- Using curly braces for default imports
- Confusing import * as with default import
- Using require syntax in ES modules
mathUtils.ts:
export default function add(a: number, b: number) { return a + b; }
export function multiply(a: number, b: number) { return a * b; }
What will be the output of this code?
import add, { multiply } from './mathUtils';
console.log(add(2, 3));
console.log(multiply(2, 3));Solution
Step 1: Understand import statements
The default export functionaddis imported without braces, and the named exportmultiplyis imported with braces.Step 2: Evaluate function calls
add(2, 3)returns 5, andmultiply(2, 3)returns 6, so console logs 5 and 6.Final Answer:
5 and 6 -> Option DQuick Check:
Default + named import works = 5 and 6 [OK]
- Importing default export with braces
- Calling undefined functions due to wrong import
- Confusing output values
export default function greet() { return 'Hello'; }
export function greet() { return 'Hi'; }
What is the problem here?Solution
Step 1: Identify duplicate function names
Both the default export and named export use the same function namegreet, which causes a conflict.Step 2: Understand export rules
Exports must have unique names; default export can be anonymous or named but cannot clash with named exports.Final Answer:
You cannot have two functions with the same name exported, even if one is default. -> Option CQuick Check:
Duplicate export names cause error [OK]
- Assuming default export must be anonymous
- Thinking named exports can't be functions
- Ignoring duplicate export names
shapes.ts exporting multiple shapes and a default export for the main shape:
export interface Circle { radius: number; }
export interface Square { side: number; }
const defaultShape = { type: 'circle', radius: 5 };
export default defaultShape;
How would you import both the default shape and the Square interface correctly in another file?Solution
Step 1: Import default export without braces
The default exportdefaultShapeis imported without curly braces.Step 2: Import named export with braces
The named exportSquareinterface is imported with curly braces.Final Answer:
import defaultShape, { Square } from './shapes'; -> Option AQuick Check:
Default no braces, named with braces [OK]
- Using braces for default import
- Trying to import default as named
- Confusing import * as with default import
Ready to prove it?
Pass the test and this pattern moves unknown
