• TypeSprict -- 基础类型


    1. 1 .'boolean' -- 布尔类型,可以赋值true/falseBoolean()对象
    2. 2. 'number' -- 数字类型,可以赋值'2/8/10/16进制''整数类型'
    3. '小数类型''NaN''Infinity(表示无穷大)'
    4. 3. 'string' -- 字符串类型
    5. 4. '数组类型' -- '类型[]' /' Array<类型>'
    6. 5. '元组类型' -- '[类型]'
    7. 6. 'enum' -- 枚举
    8. 7. 'any' -- 任意类型
    9. 8. 'void' -- 空置,定义方法时候没有返回值使用
    10. 9.'null/undefined' -- 'Null 和 Undefined'
    11. 10. 'never' -- 不存在类型一般用于错误处理函数.例如'抛出异常'/'死循环'
    12. 11. 'object' -- 对象
    13. 12. '类型断言' -- 手动指定一个值的类型。

    let 和 const

    1. 两者区别'const' 必须定义就赋值,但'let' 定义时候可以不赋值,但使用时候
    2. 必须赋值
    • 错误示范
    1. // const
    2. const name1 : string // ts会校验 定义时必须要赋值
    3. // let
    4. let name2 : string // 这一步是正确的可以定义不赋值
    5. console.log(name2) // 错误的 使用时候必须要赋值
    • 正确写法
    1. // const
    2. const name1 : string = 'Tom'
    3. console.log(name1) // 打印结果 Tom
    4. // let
    5. let name2 : string // 当然也可以写成 let name2:string = 'Anne'
    6. name1 ='Anne'
    7. console.log(name2) // 打印结果是Anne

    基本类型写法

    布尔类型 -- boolean

    1.只能赋值true 或者 falseBoolean()对象
    
    • 赋值为true 和 false
    1. let bool:boolean = true // 只能赋值true 或者 falseBoolean()对象
    2. bool = false // 重新赋值
    3. console.log(bool) // 打印结果false
    • 赋值为Boolean()对象
    1. let bool: boolean = Boolean(1)
    2. console.log(bool) // true

    数字类型 -- number

    1. 1.ts 和 js 一样,TypeScript里的所有数字都是浮点数。不像java中有整数类
    2. 型、双精度类型等等,因为'ts' 的 数字表现形式是'number'
    3. 2.定义成number 只能赋值有:
    4. '二进制''八进制''十进制''十六进制'
    5. '整数类型和小数类型(整数类型可以算进十进制)''NaN(非数字类型)'
    6. 'Infinity(表示无穷大)'

    使用 number 定义数值类型

    1. let decLiteral: number = 6;
    2. let hexLiteral: number = 0xf00d;
    3. // ES6 中的二进制表示法
    4. let binaryLiteral: number = 0b1010;
    5. // ES6 中的八进制表示法
    6. let octalLiteral: number = 0o744;
    7. let notANumber: number = NaN;
    8. let infinityNumber: number = Infinity;

    编译结果

    1. var decLiteral = 6;
    2. var hexLiteral = 0xf00d;
    3. // ES6 中的二进制表示法
    4. var binaryLiteral = 10;
    5. // ES6 中的八进制表示法
    6. var octalLiteral = 484;
    7. var notANumber = NaN;
    8. var infinityNumber = Infinity;

    字符串类型 -- string

    1. let str: string = 'abc'
    2. str = `字符串: ${ str }` // 字符串也支持es6的`` 拼接写法
    3. console.log( str )

    数组类型

    1. 数组类型是用来限制数组内部元素的类型,有两种写法
    2. 1.'「类型 + 方括号」表示法'
    3. 2.'数组泛型'
    • 「类型 + 方括号」
    1. // 第一种写法
    2. let arr: number[]
    3. arr = [1,2,3,4]
    • 泛型
    1. // 第二种写法泛型
    2. let arr: Array<number>
    3. arr = [1,2,3,4]
    • 联合类型
    1. let arr: (string|number)[] // 既可以是数字也可以是字符串类型
    2. arr = [1,'abc']
    3. // 联合类型泛型的形式
    4. let arr: Array<string|number>
    5. arr = [1,'abc']

    元组类型

    1. 数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。
    2. 1.元组类型:固定长度固定类型
    3. 2.顺序必须一一对应
    4. 3.是可以'push' 往里面添加元素,但只能添加定义好的联合类型
    1. let tom: [string, number, boolean]
    2. tom = ['abc', 1, true]

    枚举类型 -- enum

    枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。
    
    • 枚举定义
    1. // 简单例子
    2. enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 枚举成员默认会被赋值为从 0 开始递增的数字

    1. // 也可以手动赋值
    2. enum Days {Sun = 7, Mon = 1, Tue, Wed, Thu, Fri, Sat};
    3. console.log(Days["Sun"] === 7); // true
    4. console.log(Days["Tue"] === 2); // true
    5. console.log(Days["Sat"] === 6); // true

    • 枚举项有两种类型:常数项(constant member)和计算所得项(computed member)。
    1. // 上面的例子是常数项,下面是一个典型的计算所得项的例子
    2. enum Color {Red, Green, Blue = "blue".length} // "blue".length 就是一个计算所得项

    打印出来是这个结构

    注意:紧接在计算所得项后面的必须手动赋值的项,否则它就会因为无法获得初始值而报错

    任意类型 -- any

    1. 1.有些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类
    2. 型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用any类型来标
    3. 记这些变量
    4. 2.如果变量在声明的时候,未指定其类型,那么它会被识别为任意值类型

    如果是一个普通类型,在赋值过程中改变类型是不被允许的

    1. // 错误写法
    2. let name: string = 'Tom'
    3. str= 7
    4. // index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

    但如果是 any 类型,则允许被赋值为任意类型。

    1. let name: any= 'Tom'
    2. name = 7
    3. name = true

    声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都可以是任意值。这就违背了
    我们用ts严格规范类型的意义,所以在项目中尽可能少用any定义类型

    空值 -- void

    1. // 'void'表示没有任何返回值的函数
    2. function getName(): void {
    3. alert('My name is Tom');
    4. }

    Null 和 Undefined

    1. void 的区别是,undefinednull 是所有类型的子类型。也就是说 undefined 类型
    2. 的变量,可以赋值给 number 类型的变量
    1. let u: undefined = undefined;
    2. let n: null = null;
    1. let u: undefined
    2. let num: number = u; // 这样不会报错

    不存在的类型 -- never

    1. 1.never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或
    2. 根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never
    3. 类型,当它们被永不为真的类型保护所约束时。
    4. 2.never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型
    5. 或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never
    1. let x: never;
    2. let y: number;
    3. // 运行错误,数字类型不能转为 never 类型
    4. x = 123;
    5. // 运行正确,never 类型可以赋值给 never类型
    6. x = (()=>{ throw new Error('exception')})();
    7. // 运行正确,never 类型可以赋值给 数字类型
    8. y = (()=>{ throw new Error('exception')})();
    9. // 返回值为 never 的函数可以是抛出异常的情况
    10. function error(message: string): never {
    11. throw new Error(message);
    12. }
    13. // 返回值为 never 的函数可以是无限循环这种无法被执行到的终止点的情况
    14. function loop(): never {
    15. while (true) {}
    16. }

    对象 -- object

    1. let obj:object = {
    2. name:"tom"
    3. }
    4. function objFun(obj:object): void{
    5. console.log(obj)
    6. }
    7. objFun(obj)

    类型断言

    1. 1.当 ts 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型
    2. 里共有的属性或方法
    3. 2.两种写法:'<类型>值' 或者 '值 as 类型'
    • 两种写法
    1. // 尖括号写法:<类型>
    2. let str: any = "this is a string";
    3. let strLength: number = (<string>str).length;
    4. // as 的写法: 值 as 类型
    5. let str: any = "this is a string";
    6. let strLength: number = (str as string).length;
    • 函数中的应用
    1. function getLength(something: string | number): number {
    2. if ((<string>something).length) {
    3. return (<string>something).length;
    4. } else {
    5. return something.toString().length;
    6. }
    7. }

    注意:类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的

    1. function toBoolean(something: string | number): boolean {
    2. return <boolean>something;
    3. }
    4. // index.ts(2,10): error TS2352: Type 'string | number' cannot be converted to type 'boolean'.
    5. // Type 'number' is not comparable to type 'boolean'.
  • 相关阅读:
    小车联网—通过ESP8266将速度发送到客户端
    电脑数据恢复软件分享,需要的快收藏
    喜讯!持安科技入选2023年北京市知识产权试点单位!
    Spring Retry 在SpringBoot 中的应用
    设信号x(t)=cos(2π×50t)+2×cos(2π×400t),试将它的两个频率分量分离,并绘制它们的时域波形及频谱图
    2分钟快速安装 `nginx` 和配置 `keepalived`
    10月11-12日上课内容 Ansible、
    通过文件流转加密压缩文件并下载
    lwip --snmp概念篇
    Arduino驱动AS7341可见光谱传感器(颜色传感器篇)
  • 原文地址:https://blog.csdn.net/qq_47443027/article/details/126500742