TypeScript declarations have a rich set of behaviors needed to model types and values, and as in JavaScript, they can be overloaded in a variety of ways. This appendix covers two of these behaviors, summarizing which declarations generate types (and which generate values), and which declarations can be merged.
Some TypeScript declarations create a type, some create a value, and some create both. See to Table C-1 for a quick reference.
Keyword | Generates a type? | Generates a value? |
---|---|---|
|
Yes |
Yes |
|
No |
Yes |
|
Yes |
Yes |
|
No |
Yes |
|
Yes |
No |
|
No |
Yes |
|
Yes |
No |
Declaration merging is a core TypeScript behavior. Take advantage of it to create richer APIs, better modularize your code, and make your code safer.
Table C-2 is reprinted from “Declaration Merging”; it’s a handy reference for which kinds of declarations TypeScript will merge for you.
To | ||||||||||
Value |
Class |
Enum |
Function |
Types alias |
Interface |
Namespace |
Module |
|||
Value |
No |
No |
No |
No |
Yes |
Yes |
No |
— |
||
Class |
— |
No |
No |
No |
No |
Yes |
Yes |
— |
||
Enum |
— |
— |
Yes |
No |
No |
No |
Yes |
— |
||
From |
Function |
— |
— |
— |
No |
Yes |
Yes |
Yes |
— |
|
Type alias |
— |
— |
— |
— |
No |
No |
Yes |
— |
||
Interface |
— |
— |
— |
— |
— |
Yes |
Yes |
— |
||
Namespace |
— |
— |
— |
— |
— |
— |
Yes |
— |
||
Module |
— |
— |
— |
— |
— |
— |
— |
Yes |