never
never
const a: string;
if (typeof(a) !== "string") {
// string - string == never
a.substring(0, 1); // Compile error
}
Slide 13
Slide 13 text
type MyEnum = "Hoge" | "Huga";
// JSON MyEnum
//
switch(JSON.parse(`"INVALID VALUE"`) as MyEnum) {
case "Hoge": return something;
case "Huga": return something;
default: throw new Error(a);
}
| "Piyo"
Slide 14
Slide 14 text
type MyEnum = "Hoge" | "Huga" | "Piyo";
// JSON MyEnum
//
switch(JSON.parse(`"INVALID VALUE"`) as MyEnum) {
case "Hoge": return something;
case "Huga": return something;
default: throw new Error(a); // "Piyo" ...
}
| "Piyo"
case "Piyo" default
default "INVALID VALUE"
Slide 15
Slide 15 text
/** enum */
class InvalidMyEnumError extends Error {
construct(value: never) { // = never
super(`Invalid value: ${value}`);
}
}
type MyEnum = "Hoge" | "Huga" | "Piyo";
switch(JSON.parse(`"INVALID VALUE"`) as MyEnum) {
case "Hoge": return something;
case "Huga": return something;
default:
// case value: never
// value: never
// Type '"Piyo"' is not assignable to type 'never'.
throw new InvalidMyEnumError(value);
}
Readonly
type Readonly = {
readonly [P in keyof T]: T[P];
};
Slide 24
Slide 24 text
keyof
type Readonly = {
readonly [P in keyof T]: T[P];
};
keyof T T
keyof { name: string, age: number } "name" | "age"
Slide 25
Slide 25 text
in
type Readonly = {
readonly [P in keyof T]: T[P];
};
[ in ]:
type Hoge = {
[P in "name" | "age"]: Error;
};
type Hoge = {
name: Error;
age: Error;
};
Slide 26
Slide 26 text
T[ ]
type Readonly = {
readonly [P in keyof T]: T[P];
};
T[ ]
type T = { name: string; age: number; };
type Hoge = {
readonly name: T["name"];
readonly age: T["age"];
};
type Hoge = {
readonly name: string;
readonly age: number;
};
Slide 27
Slide 27 text
type Readonly = {
readonly [P in keyof T]: T[P];
};
keyof T
"name" | "age"
[P in key of T]:
T[P]
T["name"] T["age"]
readonly
Slide 28
Slide 28 text
// T Map key, value DeepReadonly ReadonlyMap
type DeepReadonly = T extends Map
? ReadonlyMap, DeepReadonly>
: ...
// : DeepReadonly TS
infer
K V
Slide 29
Slide 29 text
Compile-time emulation of a 4-bit Virtual Machine using
TypeScript's Type System
Slide 30
Slide 30 text
tsconfig.json
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
const hoge = [1, 2];
any
any[]
number[]
[ number, number ]
[ 1, 2 ]
[ number, number... ]