Merging Namespaces with Classes
This gives the user a way of describing inner classes.
class Album { label: Album.AlbumLabel; } namespace Album { export class AlbumLabel { } }
The visibility rules for merged members is the same as described in the ‘Merging Namespaces’ section, so we must export the AlbumLabel
class for the merged class to see it. The end result is a class managed inside of another class. You can also use namespaces to add more static members to an existing class.
In addition to the pattern of inner classes, you may also be familiar with JavaScript practice of creating a function and then extending the function further by adding properties onto the function. TypeScript uses declaration merging to build up definitions like this in a type-safe way.
function buildLabel(name: string): string { return buildLabel.prefix + name + buildLabel.suffix; } namespace buildLabel { export let suffix = ""; export let prefix = "Hello, "; } alert(buildLabel("Sam Smith"));
Similarly, namespaces can be used to extend enums with static members:
enum Color { red = 1, green = 2, blue = 4 } namespace Color { export function mixColor(colorName: string) { if (colorName == "yellow") { return Color.red + Color.green; } else if (colorName == "white") { return Color.red + Color.green + Color.blue; } else if (colorName == "magenta") { return Color.red + Color.blue; } else if (colorName == "cyan") { return Color.green + Color.blue; } } }
Please login to continue.