let value: number | string | undefined; // union型
let value: any; // any型 - 何でも入れられるけど、なるべく避けよう
let value: unknown; // unknown型も何でも入れられるけど、他の型に入れることはできないよ
普通は型推論でいいけど、あえて書くならこうなる
const person: {
name: string;
age: number;
} = {
name: 'Jack',
age: 21
}
const fruits: string[] = ['Apple', 'Banana', 'Orange'];
const fruits: (string | number)[] = ['Apple', 'Banana', 3] // 配列のUnion型
const fruits: any[] = ['Apple', 'Banana', 3, false]
const book: [string, number, boolean?] = ['business', 1500, false] // Tuple型 - 厳密に個数や順番も指定できるよ
enum CoffeeSize {
SHORT = 'Short',
TALL = 'Tall',
GRANDE = 'Grande',
VENTI = 'Venti'
}
const coffee = {
hot: true,
size: CoffeeSize.SHORT
}
coffee.size = CoffeeSize.TALL // こうすると、CoffeeSize型しか代入できないよ!|
// ちなみに、Enumは値をセットしないでもいけるよ。
enum CoffeeSize { SHORT, TALL, GRANDE, VENTI }
const coffee = {
hot: true,
size: CoffeeSize.SHORT
}
Enumみたいに使えるよ!
let clothSize: 'small' | 'medium' | 'large'
clothSize = 'small'
clothSize = 'Medium' // -> errorになるよ
オブジェクトの中でLiteral型を使える
const cloth: {
color: string;
size: 'small' | 'medium' | 'large';
} = {
color: 'red',
size: 'medium'
}
Type alias でスッキリ書くと…
type ClothSize = 'small' | 'medium' | 'large'
const cloth: {
color: string;
size: ClothSize;
} = {
color: 'red',
size: 'medium'
};
あるいは… オブジェクトのTypeAliasを使って、こう書いても良い
type Cloth = {
color: string;
size: 'small' | 'medium' | 'large';
}
const cloth: Cloth = {
color: 'red',
size: 'medium'
}
const doubleNum = (n: number): number => n * 2
const doubleNum: (n: number) => number = n => n * 2 // どちらでも良い
// もしくは
type doubleNum = (n: number) => number;
const doubleNum: doubleNum = n => n * 2
// ちなみに、interfaceを使うとこう書ける
interface doubleNum {
(n: number): number;
}
const doubleNum: doubleNum = n => n * 2
強制的に型を指定できる。
<>
とas
のどちらでも良いけど、React/JSXを使う場合はタグと区別するため「as」を使うべし。
const input = <HTMLInputElement>document.getElementById('input'); // <>を使う場合
const input = document.getElementById('input') as HTMLInputElement; // asを使う場合
input.value = 'initial input value' // ちゃんと型を指定しないと、.valueがエラーになるよ
function advancedFn (...args: readonly number[]) { // readonlyを付けておいた方が安全だね!
}
advancedFn(0, 3, 3, 3, 3, 3);
// タプル型を組み合わせたりもできる
function advancedFn (...args: [number, string, boolean, ...number[]]) {
}
advancedFn(0, 'hello', true, 3, 3, 3, 3, 3);