TypeScriptでは、タイプシステムに「理論的にはこれらの複数のタイプがあるかもしれないことを知っていますが、実際にはこれだけがあることを知っています」と伝えるにはどうすればよいですか」
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」の結果であると予想されるという主張になります。これらのタイプのアサーションはコンパイル時に削除されますが、狭窄だけでは不十分な場合は役立つ場合があります。