Appendix C. Scoped Declarations
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.
Does It Generate a Type?
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 |
Does It Merge?
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 |
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access