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.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence