Typescript Types
Typescript
Tuple
const employee: [number, string] = [1, "Steve"];
const person: [number, string, boolean] = [1, "Steve", true];
Enum
enum E1 {
X,
Y,
Z
}
// X 0
// Y 1
// Z 2
enum E2 {
A = 1,
B,
C,
}
// A 1
// X 2
// C 3
Union
const combine = (input1: number| string, input2: number|string) =>{ }
Literal
type Easing = "ease-in" | "ease-out" | "ease-in-out";
class UIElement {
animate(dx: number, dy: number, easing: Easing) {
if (easing === "ease-in") {
// ...
} else if (easing === "ease-out") {
} else if (easing === "ease-in-out") {
} else {
// It's possible that someone could reach this
// by ignoring your types though.
}
}
}
let button = new UIElement();
button.animate(0, 0, "ease-in");
button.animate(0, 0, "uneasy"); // error
interface MapConfig {
lng: number;
lat: number;
tileSize: 8 | 16 | 32;
}
setupMap({ lng: -73.935242, lat: 40.73061, tileSize: 16 });
any
vs unknown
https://www.bilibili.com/video/BV1WR4y1P7dw
any
不在乎他的类型unknown
不知道他的类型
let value: unknown;
value.foo.var; // error
value.trim(); // error
value(); // error
let value: any;
value.foo.var; // success
value.trim(); // success
value(); // success
never
void
表示没有任何类型
never
表示永远不存在的值的类型。
当一个函数永不返回时(或者总是抛出错误),它的返回值为 never 类型
function foo(x: string | number): boolean {
if (typeof x === 'string') {
return true;
} else if (typeof x === 'number') {
return false;
}
// 如果不是一个 never 类型,这会报错:
// - 不是所有条件都有返回值 (严格模式下)
// - 或者检查到无法访问的代码
// 但是由于 TypeScript 理解 `fail` 函数返回为 `never` 类型
// 它可以让你调用它,因为你可能会在运行时用它来做安全或者详细的检查。
return fail('Unexhaustive');
}
function fail(message: string): never {
throw new Error(message);
}