Bird
Raised Fist0
Typescriptprogramming~20 mins

Type-only imports and exports in Typescript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Type-only Imports and Exports Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this TypeScript code with type-only import?
Consider the following TypeScript files. What will be the output when compiled and run with Node.js (ignoring type-only imports)?
Typescript
/* types.ts */
export type User = { name: string; age: number };

/* main.ts */
import type { User } from './types';

const user: User = { name: 'Alice', age: 30 };
console.log(user.name);
AAlice
Bundefined
CCompilation error due to type-only import
DRuntime error: User is not defined
Attempts:
2 left
💡 Hint
Type-only imports are removed from the compiled JavaScript code.
❓ Predict Output
intermediate
2:00remaining
What error does this code raise due to incorrect type-only export?
Examine this TypeScript code snippet. What error will occur during compilation?
Typescript
/* data.ts */
const data = { id: 1, value: 'test' };
export type Data = typeof data;
export default data;

/* index.ts */
import data, { type Data } from './data';

const newData: Data = { id: 2, value: 'hello' };
console.log(newData);
AError: Default import 'data' is not a constructor
BRuntime error: newData is undefined
CError: Cannot use type-only export 'Data' as a value
DNo error, outputs { id: 2, value: 'hello' }
Attempts:
2 left
💡 Hint
Type-only exports can be imported with 'type' keyword and used for typing only.
❓ Predict Output
advanced
2:00remaining
What is the output of this code mixing type-only and value imports?
Analyze this TypeScript code. What will be printed to the console?
Typescript
/* shapes.ts */
export type Circle = { radius: number };
export const PI = 3.14;

/* app.ts */
import type { Circle } from './shapes';
import { PI } from './shapes';

const circle: Circle = { radius: 5 };
console.log(PI * circle.radius * circle.radius);
ACompilation error: Cannot mix type-only and value imports
BNaN
C78.5
DRuntime error: PI is undefined
Attempts:
2 left
💡 Hint
Type-only imports do not affect runtime, value imports do.
❓ Predict Output
advanced
2:00remaining
What error occurs when using a type-only import as a value?
What happens when you try to use a type-only import as a value in this code?
Typescript
/* models.ts */
export type Product = { id: number; name: string };

/* index.ts */
import type { Product } from './models';

const p = Product;
console.log(p);
ACompilation error: 'Product' only refers to a type but is used as a value here
BRuntime error: Product is undefined
COutputs the type definition of Product
DNo error, outputs the Product object
Attempts:
2 left
💡 Hint
Type-only imports cannot be used as values at runtime.
🧠 Conceptual
expert
2:00remaining
Which statement about type-only imports and exports is true?
Select the correct statement about TypeScript's type-only imports and exports.
AType-only imports allow importing runtime values without type information.
BUsing 'import type' ensures the imported entity is removed from the JavaScript output.
CType-only imports are included in the compiled JavaScript output as variables.
DType-only exports can be imported without the 'type' keyword and used as runtime values.
Attempts:
2 left
💡 Hint
Think about what happens to type-only imports during compilation.

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

  1. Step 1: Understand the role of import type

    This syntax imports only type information, not actual code that runs.
  2. Step 2: Compare with normal imports

    Normal imports bring in both types and runtime code, but import type excludes runtime code.
  3. Final Answer:

    To import only types without including any runtime code. -> Option D
  4. 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

  1. Step 1: Identify correct export type syntax

    TypeScript uses export type { ... } to export only types.
  2. 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.
  3. Final Answer:

    export type { MyType } from './types'; -> Option B
  4. 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

  1. Step 1: Understand import type usage

    The import type imports only type info, which is erased at runtime.
  2. 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.
  3. Final Answer:

    It will print 'Hello, ' followed by the user's name at runtime. -> Option A
  4. 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

  1. Step 1: Check import and export compatibility

    Types imported with import type must be exported with export type.
  2. Step 2: Identify correct export syntax

    Using normal export { Config } tries to export a runtime value, which does not exist.
  3. Final Answer:

    You must use export type { Config } to export the type correctly. -> Option C
  4. 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

  1. Step 1: Understand import type behavior

    import type imports only types, no runtime values like PI.
  2. Step 2: Check options for importing only Circle

    import type { Circle } from './shapes'; imports only the type Circle without bringing in PI.
  3. Final Answer:

    import type { Circle } from './shapes'; -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard