01-TypeScirpt 基本语法

2020-09-30  本文已影响0人  低头看云

数字 Number

var num: number = 1
console.log('num', num)
//  除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。
var num1: number = 10 // 10进制
var num2: number = 0x000a // 16进制
var num3: number = 0b1010 // 2进制
var num4: number = 0o0012 //  8进制
console.log(num1, num2, num3, num4) // 10 10 10 10

布尔值 Boolean

var b: boolean = false
console.log('b', b)

字符串 String

var personName: string = 'Cloud'
//使用typescript 点方法时可以给出字符串方法的提示
// toLowerCase() 会将调用该方法的字符串值转为小写形式,并返回
var lowerCaseName: string = personName.toLowerCase()
// 同样在typescript中可以使用模板字符串
// 它可以定义多行文本和内嵌表达式。 这种字符串是被反引号包围(`),并且以${ expr }这种形式嵌入表达式
var introduce: string = `my name is ${personName}`

console.log('personName', personName, lowerCaseName, introduce) // cloud

数组 Array

var arr: number[] = [1, 3, 5]
var arr1: Array<number> = [2, 4, 6]
console.log('arr', arr, arr1)


// 当数组中有字符串和数字时  类似于或的意思
var arr2:(string | number)[] = [1, '2', 3]

  let arr4: any[] // 表示定义了一个名称叫做arr4的数组, 这个数组中将来可以存储任意类型的数据
  arr4 = [1, 'b', false]
  console.log(arr4)

元组 Tuple

  // 第一个元素是字符串, 第二个是数字类型, 第三个元素必须是布尔类型
  let arr5: [string, number, boolean]
  arr5 = ['a', 3, true]
  // arr5 = ['a', 3, 'false'] // 'string' is not assignable to type 'boolean'.
  console.log('arr5', arr5)

var tup: [string, number] = ['cloud', 18]
// tup = [10,"cloud"] // error 报错
const teacherInfo: [string, string, number] = ['Dell', 'male', 18];

枚举 enum

  // 定义一个名称叫做gender的枚举类型
  // 这个枚举的取值类型是Male 和 Female
  enum Gender {
    Male,
    Female,
  }
  let val: Gender
  val = Gender.Male
  // val = 'nan' // 报错
  // 注意: ts的枚举底层是实现的本质就是数值类型, 所以赋值一个数值不会报错
  val = 123 // 不会报错

  console.log(Gender.Male) // 0
  console.log(Gender.Female) // 1

// 定义一个ColorType 的枚举
enum ColorType {
  Red,
  Green = 3,
  Blue
}

var c: ColorType = ColorType.Red  // 0
// 注意: 如果手动指定了后面的枚举的取值, 那么前面枚举的取值不会受到影响
var c: ColorType = ColorType.Blue  // 4

console.log(c)
enum Color {
  Red = 1,
  Green,
  Blue
}
var colorName: string = Color[2]

console.log(colorName) // 显示'Green'因为上面代码里它的值是2
    // 探究底层实现原理
    var Gender;
    (function (Gender) {
    // Gender[key] = value;
    Gender[Gender["Male"] = 0] = "Male";
    Gender[Gender["Femal"] = 1] = "Femal";
    })(Gender || (Gender = {}));
    
    let Gender = {};
    Gender["Male"] = 0;
    Gender[0] = "Male";
    Gender["Femal"] = 1;
    Gender[1] = "Femal";
      

数字枚举

  const num = 123
  function getNum() {
    return 23
  }

  enum Gender1 {
    Male,
    Female = num,
    //   Shen, // 如果使用常量给前面的枚举赋值了, 那么后面的枚举值也需要手动赋值
    Yao = getNum(),
  }

  console.log('Gender1', Gender1.Male) // 0
  console.log('Gender1', Gender1.Female) // 123
  console.log('Gender1', Gender1.Yao) // 23
  enum Gender2 {
    Male,
    Female,
  }
  console.log('Gender2', Gender2.Male) // 0
  console.log('Gender2', Gender2[1]) // Female

字符串枚举

enum StringEnum {
    Title = '123',
    // text , // 如果字符串前面的枚举值赋值了,那么后面的枚举值也必须赋值
    Text = 'test',
  }

  console.log(StringEnum.Title)
  let str = 'sssddf'
  function getStr(): string {
    return 'sdfsd'
  }
  enum StringEnum1 {
    Str = '23',
    //   title = str,
    // text , // 如果字符串前面的枚举值赋值了,那么后面的枚举值也必须赋值
    Text = 'test',
    Str2 = Str,
    //   demo = getStr(),
  }
  console.log('StringEnum1', StringEnum1.Str2) // StringEnum1 23

异构枚举

 enum Gender3 {
    Male = 3,
    Female = 'ss',
  }

  console.log('Gender3', Gender3.Female)
  console.log('Gender3', Gender3[3])
  // console.log('Gender3', Gender3['ss'])
  // 注意点: 如果是字符串枚举, 那么无法通过原始值获取到枚举值
  console.log('Gender3', Gender3) // {3: "Male", Male: 3, Female: "ss"}

联合枚举类型

  interface PersonInterface {
    gender: Gender
  }
  class Person implements PersonInterface {
    gender: Gender = Gender.Male
  }
  let p = new Person()
  console.log('p.gender', p.gender)

任意值 any

var a: any = 1
a = "cloud"
a = false
let list: any[] = [1, false, 'cloud']
console.log(list[1])

空值 void

function func(): void {
  console.log('hello')
}
let unusable: void = null

let value: void // 定义了一个不可以保存任意类型数据的变量, 只能保存null和undefined
// value = 123; // 报错
// value = "abc";// 报错
// value = true;// 报错
// 注意点: null和undefined是所有类型的子类型, 所以我们可以将null和undefined赋值给任意类型
// value = null // 不会报错
value = undefined // 不会报错

Null 和 Undefined

let u: undefined = undefined
let n: null = null

Never 类型

  function demo(): never {
    throw new Error('报错了')
  }
  demo()

Object 类型

  //  Object 类型
  // 表示一个对象
  let obj: object

  // obj = 1 // 报错
  obj = { name: 'sss', age: 12 }
  console.log('obj', obj) // {name: "sss", age: 12}

类型断言

let str1: any = 'hello world'
let strLength: number = (<string>str1).length
console.log(strLength)
let str2: any = 'hello world'
let strLength1: number = (str2 as string).length
console.log(strLength1)

null 和 undefined

let value1 = null
let value2 = undefined
// 开启strictNullChecks
value1 = value2 // 报错
let value:(number | null | undefined);
value = null;
value = undefined;

 class Person {
    name?: string
  }
  function say(age?: number) {}
  function getLength(value: string | null | undefined) {
    value = 'abc'
    return () => {
      // return value.length // Object is possibly 'null' or 'undefined'.
      // 使用 ! 来去除 null 和 undefined
      // ! 的含义就是这个变量一定不是null 和 undefined
      return value!.length
    }
  }
上一篇 下一篇

猜你喜欢

热点阅读