# 类型注解/申明
基础类型 · TypeScript中文网 (opens new window) 高级类型 · TypeScript中文网 (opens new window)
// 申明变量 with 类型注解/类型申明
let a : string;
// 申明并赋值标量
let a : string = "abc";
// 类型推断
let a = "abc";
function add(x: number, y: number): number {
return x + y;
}
let myAdd = function(x: number, y: number): number { return x + y; };
# 字面量
let a: 10; // a 只能是 10,类似常量
let a: "male" | "female"; // 联合类型
a = "male"; // ok
a = "female"; // ok
a = "hello"; // 不 ok
let c: boolean | string; // c 可以是 boolean 或者 string
# any
一般不用
let a: any;
let a; // 申明变量不指定类型,则隐式指定为 any
let s: string;
s = a; // 可以赋值,危险!
# unknown
类型安全的 any
[Typescript] 使用 unknown 类型代替 any 类型 - Meowu's Web Blog (opens new window)
let a: unknown;
let s: string;
s = a; // 不可以赋值
let a: unknown;
let s: string;
if(typeof s === "string"){
s = a; // 可以赋值了
}
// 类型断言
s = a as string;
s = <string>a;
类型断言 | 深入理解 TypeScript (opens new window)
# object
指定对象中可以包含哪些属性(默认不能多不能少)
// age 是可选属性
let a: {name: string, age?: number};
a = {name: "swk"}
// 必要要求有 name, 其它属性不管(propName 是自定义名称,string 表示属性名是 string 类型,any 表示属性值是 any)
let b: {name: string, [propName: string]: any}
// 函数签名的申明(C#委托)
let f = (a: number, b: number) => number;
// 具体的实现
f = function(n1: number, n2: number): number{
return n1 + n2;
}
# 联合类型
let j: {name: string} & {age: number};
j = {name: '孙悟空', age: 500};
# 类型别名
高级类型 · TypeScript中文网 (opens new window) - 类型别名
type myType = 1 | 2 | 3 | 4 | 5;
let a: myType;
a = 1; // ok
1 = 8; // 不 ok
type myType = {
name: string,
age: number
}
const obj: myType = {
name: "abc",
age: 123
}
高级类型 · TypeScript中文网 (opens new window) - 接口 vs. 类型别名