Structs in TypeScript
On this page
Our example demonstrates how to define and use structs. Structs in TypeScript
are represented by interfaces
and classes. Here’s the complete example translated:
// Define the person interface
interface Person {
name: string;
age: number;
}
// Define a class that implements the person interface
class PersonClass implements Person {
name: string;
age: number;
constructor(name: string) {
this.name = name;
// Default age set to 42
this.age = 42;
}
}
// Create new instances and use them
function main() {
console.log({ name: "Bob", age: 20 });
// Named fields initialization
console.log({ name: "Alice", age: 30 });
// Omitted fields default to undefined
console.log({ name: "Fred", age: undefined });
// Using class for struct-like functionality
console.log(new PersonClass("Ann"));
// Custom constructor function
console.log(new PersonClass("Jon"));
// Access fields using dot notation
const s: Person = { name: "Sean", age: 50 };
console.log(s.name);
// Access fields through object
const sp: Person = s;
console.log(sp.age);
// Mutate struct fields
(sp as any).age = 51; // Note: Direct mutation is not typical in TypeScript
console.log(sp.age);
// Example of an anonymous struct type
const dog = {
name: "Rex",
isGood: true
};
console.log(dog);
}
main();
Explanation
Struct Definition
In TypeScript, structs can be represented by interfaces or classes. An interface
defines the structure, while a class
can implement it and provide constructor or methods:
interface Person {
name: string;
age: number;
}
Constructor Function
A constructor function or class is used to initialize new instances of Person
:
class PersonClass implements Person {
name: string;
age: number;
constructor(name: string) {
this.name = name;
this.age = 42; // default age
}
}
Instantiating Structs
You can create new instances directly:
console.log({ name: "Bob", age: 20 });
console.log({ name: "Alice", age: 30 });
console.log({ name: "Fred", age: undefined });
Or by using the class:
console.log(new PersonClass("Ann"));
console.log(new PersonClass("Jon"));
Access and Mutation
Fields in the struct-like objects can be accessed and mutated using dot notation:
const s: Person = { name: "Sean", age: 50 };
console.log(s.name);
const sp: Person = s;
console.log(sp.age);
(sp as any).age = 51; // Note that direct mutation is not typical in TypeScript
console.log(sp.age);
Anonymous Struct Type
TypeScript supports anonymous types, used in inline variable declarations:
const dog = {
name: "Rex",
isGood: true
};
console.log(dog);
This way, we maintain the expressiveness and idiomatic usage in TypeScript while closely following the original structure of the example.