Typescript极简版笔记-类型

74 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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