TypeScriptを使用すると、いくつかの既存のタイプ（メンバータイプと呼ばれる）に基づいて組合タイプを使用できます。たとえば、文字列または数値で動作する関数は、「function printid（id：number | string）」として定義できます。

ユニオンタイプのメンバーのいずれかと一致する場合、ユニオンタイプと一致する値はあります。指定された例では、「printid」の最初のパラメーター（つまり、「id」）は、「number」または「string」のいずれかです。

TypeScriptは、2つの条件で組合タイプの値の操作のみを許可します。
（1）組合のすべてのメンバーに対して有効である場合、または
（2）TypeScriptが特定のタイプを推定できるようにするコードを作成する場合。たとえば、「if（typeof id === "string"）{} ``のような条件付きのコードは、文字列で有効な操作を実行できます。このようにして、コードを使用して、特定のコードが1つの特定のタイプの場合にのみ適用されることをタイプスクリプトに伝えることができます。これは「狭窄」と呼ばれます。これを行うために特別なことを定義する必要はありません。

コンパイル時に特定の値が特定のタイプを持っていることをコンパイル時にチェックしたい場合は、常にタイプアサーションを使用できます。たとえば、「const mycanvas = document.getElementById（ "main_canvas"）としてhtmlcanvaselementとして、 `` ``は、「getelementbyid`呼び出しの結果が常に `htmlcanvaselement」の結果であると予想されるという主張になります。これらのタイプのアサーションはコンパイル時に削除されますが、狭窄だけでは不十分な場合は役立つ場合があります。
TypeScript allows you to use union types based on several existing types (called member types). For example,  a function that works with strings or numbers could be defined as ```function printId(id: number | string)```.

A value matches a union type if it matches any of the union type's members. In the given example, the first parameter to `printId` (that is, `id`) can be either `number` or `string`.

TypeScript will only allow operations on a value of a union type in two conditions.
(1) If it is valid for every member of the union, OR 
(2) If you write some code which allows TypeScript to deduce the specific type. For example, code in a conditional like ```if (typeof id === "string") {}``` can perform any operation that is valid on strings. In this way you can use code to tell TypeScript that certain code only applies when the value has one specific type. This is called "narrowing." You do not need to define anything special to do this.

If you want TypeScript to check at compile time that a certain value has a certain type, you can always use type assertions. For example, ```const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;``` puts in an assertion that the result of the `getElementById` call is always expected to be of type `HTMLCanvasElement`. These type assertions are removed at compile time, but you may find them helpful if narrowing is not enough for you.