携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
原始类型
//boolean
let isDone: boolean = false;
//number
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
//string
let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }.
I'll be ${ age + 1 } years old next month.`;//拼接string
//数组
let list: number[] = [1, 2, 3];
let list: Array<string> = ['1', '2', '3'];//泛型数组
let list: Array<string> = [1, '2', '3'];//err 存在number 1 不能将类型“number”分配给类型“string”
元组Tuple
//数组中的元素和类型需要对应
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error
//访问正确的类型才能得到正确的方法
console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'
console.log(x[5].toString()); // err 元组越界
元组越界在官方文档中显示正常没有报错提示,但在最新的ts版本中已经不允许使用元组越界写法
interface NumStrTuple extends Array<number | string> {//基本元组写法,长度被限制,不能越界
0: number;
1: string;
length: 2; // using the numeric literal type '2'
}
interface MinimumNumStrTuple extends Array<number | string> {
0: number;
1: string;
}
let x: MinimumNumStrTuple;
console.log(x[5].toString()); // err
以上内容可以学习完后面内容回头再看
枚举
//enum Color {Red, Green, Blue}//默认从0开始+1
//enum Color {Red = 1, Green, Blue}//默认从1开始+1
enum Color {Red = 1 , Green = 2 , Blue = 4}//自定义下标
let c: Color = Color.Green;
//转成JS格式
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
let c = Color.Green;
//使用
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
let colorName1:number = Color['Blue'];
console.log(colorName); // 'Green'
console.log(colorName1); // 3
any
表示任何类型 不建议使用,容易变成anyscript
使用场景:用户输入的内容,或者传入的值是动态的,目前不清楚定义某个类型使用any
let notSure: any = 4;
notSure = "maybe a string instead"; ok
notSure = false; // ok
let notSure: any = 4;
notSure.ifItExists(); // ok 书写代码阶段不会提示错误,因为any类型参数确实可能存在ifItExists函数,但编译的时候如果传入number 4 ,则会出现错误
notSure.toFixed(); // okay, 同上
let prettySure: Object = 4;
prettySure.toFixed(); // 对象类型无法做此操作
//在元组的应用 元组各个元素可以是任意类型
let list: any[] = [1, true, "free"];
list[1] = 100;
viod
表示没有任何类型 通常用于一个没有任何返回值的函数
function warnUser(): number {
return 1
}
function warnUser(): void {
console.log('no return)
}
never
表示存在异常或者根本不可能有返回值 通常用于报错或者死循环
//举例三个情况
fucntion err(msg:string):never{
throw error(msg)
//return error('err')
//while(true){}
}
类型断言
当某个参数为某个类型的时候参数使用某个方法
当声明一个somevalue为任意类型,而你确定传入的会是string,则可以用断言
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;//写法1
let strLength: number = (someValue as string).length;//写法2