TypeScript 类型声明
ts 中的数据类型
- 布尔类型(boolean)
- 数字类型(number)
- 字符串类型(string)
- 数组类型(array)
- 元组类型(tuple):属于数组的一种
- 枚举类型(enum)
- 任意类型(any)
- null 和 undefined
- void类型
- never类型
布尔类型(boolean)
ts
let flag:boolean=true;
flag=false; //正确
flag=123; //错误
数字类型(number)
ts
let num:number=123;
num=456; // 正确
num='str'; //错误
字符串类型(string)
ts
let str:string=`字符串`;
str='haha'; //正确
str=true; //错误
数组类型(array)
ts
let arr: Array<number> = [1]
let arr1: number[] = [1]
元组类型(tuple)
ts
let arr:[number,string]=[123,'string'];
let arr2:Array<number>=[11,22,33];
let arr3: any[] = [1,'STR']
let arr4: Array<any> = [1,'STR']
枚举类型(enum)
ts
// 格式
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数],
}
// [=整型常数] 内表示可选
- 设置值
ts
enum F {
a = '未授权',
b = '拒绝访问',
c = 500,
}
console.log(F.b); // '拒绝访问'
console.log(F[500]); // c
- 默认值
ts
enum Color{Red,Green,Blue} /* 默认下标 0 开始 */
console.log(Color.Red); // 0
console.log(Color.Green); // 1
- 部分赋值
ts
enum Color1 {blue,red=3,'orange'};
console.log(Color1.blue,Color1.red,Color1.orange); // 0 3 4
enum Err {'undefined'=-2,'null','success'=1};
console.log(Err.null); // -1
- 声明变量
ts
enum Err {'undefined'=-2,'null','success'=1};
let myColor: Err = Err.null // -1
let myColor1: Err = Err.info // 类型“typeof Err”上不存在属性“info”。
void类型
void:没有返回值,never 表示不存在的类型
ts
function fn(n:number, str:string): void {
return undefined
return null
return 1 // error 报错
}
function run():undefined{
console.log('run')
}
run(); // 错误,返回值不为 'viod' 或 'any' 必须要返回值
function run():number{
return 123;
}
run();
never类型
never 表示不存在的值
ts
var a:never;
a='a'; //错误的写法
a=(()=>{
throw new Error('错误');
})()
a = () => {
while(true){
}
}
联合类型
ts
function fn(val:number | string){}
fn(1);
fn('str')
fn(null) // 错误
类型断言
方式一: <类型>值
方式二: 值 as 类型 (tsx 中只能用这种方式)
ts
function fn1(val: number | string):number {
if((val as string).length){
return (<string>val).length
}else{
return val.toString().length;
}
}
const 断言
看以下示例:
ts
const req = { url: "https://example.com", method: "GET" };
handleRequest(req.url, req.method); // 报错,参数2获得的是"string",而不是"GET" | "POST"
你可以使用断言来传参:
ts
// 1:在声明时断言他为"GET",防止后续被再次赋值。
const req = { url: "https://example.com", method: "GET" as "GET" };
// 2:传入时断言他为"GET",原来的对象还能赋值
handleRequest(req.url, req.method as "GET");
也可以使用as const
将整个对象转换为类型文字:
ts
const req = { url: "https://example.com", method: "GET" } as const;
handleRequest(req.url, req.method);