Typescript Fundamentals Interview Questions
Comprehensive typescript fundamentals interview questions and answers for TypeScript. Prepare for your next job interview with expert guidance.
Questions Overview
1. What is TypeScript and how does it differ from JavaScript?
Basic2. What are the basic data types in TypeScript?
Basic3. How do you declare variables with type annotations in TypeScript?
Basic4. What is type inference in TypeScript?
Basic5. Explain the 'any' type in TypeScript and when should it be used?
Basic6. What is the difference between 'interface' and 'type' in TypeScript?
Moderate7. How does TypeScript handle null and undefined?
Moderate8. What are literal types in TypeScript?
Moderate9. Explain type assertions in TypeScript and when to use them.
Moderate10. What is the 'never' type in TypeScript and when is it used?
Moderate11. How do you work with arrays in TypeScript?
Basic12. What are union types in TypeScript?
Basic13. Explain the concept of type narrowing in TypeScript.
Advanced14. What are type guards in TypeScript?
Advanced15. How do you use enums in TypeScript?
Basic1. What is TypeScript and how does it differ from JavaScript?
BasicTypeScript is a strongly typed, object-oriented programming language that builds on JavaScript. It is a superset of JavaScript that adds optional static typing, classes, interfaces, and modules. The key differences include: static typing, enhanced IDE support, object-oriented features, and compilation to JavaScript. TypeScript code needs to be compiled into JavaScript before it can be run in a browser or Node.js environment.
2. What are the basic data types in TypeScript?
BasicTypeScript includes several basic data types: number (for both integers and floating-point values), string (for text), boolean (true/false), null, undefined, void (absence of value), any (dynamic typing), never (never occurs), and symbol (unique identifiers). It also supports arrays, tuples, and custom types through interfaces and type aliases.
3. How do you declare variables with type annotations in TypeScript?
BasicIn TypeScript, variables can be declared with type annotations using the colon (:) syntax. For example: 'let name: string = "John"', 'let age: number = 25', 'let isStudent: boolean = true'. Type annotations are optional due to TypeScript's type inference, but they make the code more explicit and self-documenting.
4. What is type inference in TypeScript?
BasicType inference is TypeScript's ability to automatically determine types of variables based on their values and usage. When you declare a variable with an initial value, TypeScript will use that value to infer its type. For example, 'let name = "John"' will be inferred as string type. This reduces the need for explicit type annotations while maintaining type safety.
5. Explain the 'any' type in TypeScript and when should it be used?
BasicThe 'any' type is a dynamic type that can hold values of any type. It effectively opts out of type checking for that variable. While it provides flexibility, it should be used sparingly as it defeats the purpose of TypeScript's type system. Common use cases include: working with dynamic data, gradual migration from JavaScript, and when dealing with third-party libraries without type definitions.
6. What is the difference between 'interface' and 'type' in TypeScript?
ModerateBoth interface and type are used to define custom types, but they have some differences. Interfaces are extensible through declaration merging (can be added to later), while types are not. Interfaces can only describe object shapes, while types can also create unions, intersections, and other complex types. Generally, interfaces are preferred when defining object shapes, while types are better for aliases and complex type manipulations.
7. How does TypeScript handle null and undefined?
ModerateTypeScript treats null and undefined as distinct types. By default, with strict null checks enabled (strictNullChecks compiler option), you cannot assign null or undefined to a variable unless its type explicitly allows it. You can use union types to allow null or undefined values, such as 'let name: string | null = null'. This helps prevent null reference errors common in JavaScript.
8. What are literal types in TypeScript?
ModerateLiteral types are specific value types in TypeScript where you can specify the exact value a variable can have. For example: 'let direction: "north" | "south" | "east" | "west"'. This creates a type that can only have those specific string values. Literal types can be strings, numbers, or boolean values, and are often used in union types to create enumerated sets of allowed values.
9. Explain type assertions in TypeScript and when to use them.
ModerateType assertions are a way to tell the TypeScript compiler that you know better about the type of a value. They can be written in two ways: using angle brackets '<type>' or the 'as' keyword. For example: 'let someValue: any = "hello"; let strLength: number = (<string>someValue).length;' or 'let strLength: number = (someValue as string).length;'. They should be used sparingly and only when you have more information about a type than TypeScript can determine.
10. What is the 'never' type in TypeScript and when is it used?
ModerateThe 'never' type represents values that never occur. It is used for functions that never return (throw an error or have infinite loops), and in type operations that result in no possible values. It's a bottom type, meaning it's assignable to every type, but no type is assignable to never (except never itself). Common use cases include error handling functions and exhaustive type checks.
11. How do you work with arrays in TypeScript?
BasicArrays in TypeScript can be typed in two ways: using the type followed by [] (e.g., 'number[]') or using the generic Array<type> syntax (e.g., 'Array<number>'). You can also create arrays of multiple types using union types. TypeScript provides type checking for array operations and methods. Example: 'let numbers: number[] = [1, 2, 3]' or 'let numbers: Array<number> = [1, 2, 3]'.
12. What are union types in TypeScript?
BasicUnion types allow a variable to hold values of multiple types. They are created using the | operator. For example: 'let id: string | number' means id can be either a string or a number. Union types are useful when a value could be one of several types, and TypeScript will ensure type safety by only allowing operations that are valid for all possible types in the union.
13. Explain the concept of type narrowing in TypeScript.
AdvancedType narrowing is the process of refining types to more specific ones based on type guards and conditional checks. Common type narrowing techniques include typeof checks, instanceof operators, in operator, and custom type predicates. For example, if you have a union type 'string | number' and check typeof x === 'string', TypeScript will narrow the type to string within that conditional block.
14. What are type guards in TypeScript?
AdvancedType guards are expressions that perform runtime checks to guarantee the type of a value in a scope. They can be built-in (typeof, instanceof), custom functions (user-defined type predicates using 'is'), or the 'in' operator. Type guards help TypeScript narrow down types in conditional blocks, making the code more type-safe. Example: 'function isString(value: any): value is string { return typeof value === "string"; }'
15. How do you use enums in TypeScript?
BasicEnums allow defining a set of named numeric constants. There are numeric enums (default values auto-increment from 0) and string enums (must set all values explicitly). Example: 'enum Direction { North, South, East, West }' or 'enum Direction { North = "N", South = "S" }'. Enums can be used as types and values, and TypeScript provides type safety when working with enum values.