📖 Scenario: You are working on a TypeScript project where you want to keep your code clean and efficient. Sometimes, you only need to use types from other files without importing the actual code. This helps reduce the final JavaScript size and avoid unnecessary imports.
🎯 Goal: You will create two TypeScript files. In the first file, you will define a type. In the second file, you will import that type using a type-only import and then export it again as a type-only export. Finally, you will print a message to confirm the type usage.
📋 What You'll Learn
Create a type called User in types.ts
Use a type-only import to import User in main.ts
Use a type-only export to export User from main.ts
Print a confirmation message using console.log
💡 Why This Matters
🌍 Real World
Type-only imports and exports are useful in large TypeScript projects to keep the compiled JavaScript small and avoid importing code that is only needed for type checking.
💼 Career
Many professional TypeScript developers use type-only imports and exports to optimize their code and improve maintainability, especially in frontend and backend projects.
Progress0 / 4 steps
1
Create a type in types.ts
Create a type called User in types.ts with two properties: name as a string and age as a number.
Typescript
Hint
Use export type User = { name: string; age: number; } to define the type.
2
Import the type-only User in main.ts
In main.ts, use a type-only import to import User from ./types.
Typescript
Hint
Use import type { User } from './types'; to import only the type.
3
Export the type-only User from main.ts
In main.ts, export User again using a type-only export.
Typescript
Hint
Use export type { User }; to export the type only.
4
Print a confirmation message
Add a console.log statement in main.ts that prints 'Type-only import and export done!'.
Typescript
Hint
Use console.log('Type-only import and export done!'); to print the message.
Practice
(1/5)
1. What is the main purpose of using import type in TypeScript?
easy
A. To export types from a module.
B. To import both types and runtime values together.
C. To import only runtime values and ignore types.
D. To import only types without including any runtime code.
Solution
Step 1: Understand the role of import type
This syntax imports only type information, not actual code that runs.
Step 2: Compare with normal imports
Normal imports bring in both types and runtime code, but import type excludes runtime code.
Final Answer:
To import only types without including any runtime code. -> Option D
Quick Check:
Type-only imports = import type [OK]
Hint: Remember: import type brings types only, no code. [OK]
Common Mistakes:
Thinking import type imports runtime code
Confusing import type with normal import
Using import type to export types
2. Which of the following is the correct syntax to export only types from a TypeScript module?
easy
A. export { MyType } from './types';
B. export type { MyType } from './types';
C. export import type MyType from './types';
D. export only type MyType from './types';
Solution
Step 1: Identify correct export type syntax
TypeScript uses export type { ... } to export only types.
Step 2: Check other options
export { MyType } from './types'; (export { MyType } from './types';) exports both types and values. Options B and C are invalid syntax.
Final Answer:
export type { MyType } from './types'; -> Option B
Quick Check:
Type-only export = export type [OK]
Hint: Use export type {} to export types only. [OK]
Common Mistakes:
Using normal export instead of export type
Writing invalid syntax like export only type
Confusing import syntax with export syntax
3. Consider the following code snippet:
import type { User } from './models';
function greet(user: User) {
console.log(`Hello, ${user.name}`);
}
greet({ name: "Alice" });
What will happen when this code is compiled and run?
medium
A. It will print 'Hello, ' followed by the user's name at runtime.
B. It will cause a runtime error because User is not imported as code.
C. It will fail to compile because import type cannot be used with functions.
D. It will import the full User class including methods.
Solution
Step 1: Understand import type usage
The import type imports only type info, which is erased at runtime.
Step 2: Check runtime behavior
The function uses User only as a type for parameter. At runtime, it expects an object with a name property.
Final Answer:
It will print 'Hello, ' followed by the user's name at runtime. -> Option A
Quick Check:
Type-only import works for typing, no runtime error [OK]
Hint: Type-only imports vanish at runtime but keep type safety. [OK]
Common Mistakes:
Expecting runtime import of types
Thinking import type causes runtime errors
Confusing compile-time types with runtime values
4. Identify the error in this TypeScript code:
import type { Config } from './config';
export { Config };
medium
A. You cannot export a type that was imported with import type.
B. The import type statement is missing a semicolon.
C. You must use export type { Config } to export the type correctly.
D. There is no error; this code works fine.
Solution
Step 1: Check import and export compatibility
Types imported with import type must be exported with export type.
Step 2: Identify correct export syntax
Using normal export { Config } tries to export a runtime value, which does not exist.
Final Answer:
You must use export type { Config } to export the type correctly. -> Option C
Quick Check:
Type-only export matches type-only import [OK]
Hint: Match import type with export type. [OK]
Common Mistakes:
Exporting type-only imports as normal exports
Ignoring that types do not exist at runtime
Confusing semicolon errors with syntax errors
5. You have a module shapes.ts exporting types and values:
export type Circle = { radius: number };
export const PI = 3.14;
You want to import only the type Circle in another file without importing PI. Which is the best way?
hard
A. import type { Circle } from './shapes';
B. import { Circle } from './shapes';
C. import { Circle, PI } from './shapes';
D. import type { Circle, PI } from './shapes';
Solution
Step 1: Understand import type behavior
import type imports only types, no runtime values like PI.
Step 2: Check options for importing only Circle
import type { Circle } from './shapes'; imports only the type Circle without bringing in PI.
Final Answer:
import type { Circle } from './shapes'; -> Option A
Quick Check:
Use import type to avoid importing values [OK]
Hint: Use import type to import only types, no values. [OK]
Common Mistakes:
Using normal import and importing unwanted values
Trying to import values with import type
Importing both types and values when only types are needed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.