TypeScript-基础类型(es6的symbol类型)

基础类型-basic-types

我们使用 : 指定变量的类型,: 的前后有没有空格都可以。

原始类型
  • boolean类型

    boolean类型取值false、true

    let bool1: boolean
    bool = false
    let bool2: boolean = true
    

    使用构造函数 Boolean 创造的对象不是布尔值,事实上 new Boolean() 返回的是一个 Boolean 对象,直接调用 Boolean 也可以返回一个 boolean 类型;在 TypeScript 中,boolean 是 JavaScript 中的基本类型,而 Boolean 是 JavaScript 中的构造函数。其他基本类型(除了 nullundefined)一样,不再赘述。

    let createdByNewBoolean: boolean = new Boolean(1);//error
    let createdByNewBoolean: Boolean = new Boolean(1);
    let createdByBoolean: boolean = Boolean(1);
    
  • number类型

    let num: number = 2
    
  • string类型

    let str1: string = 'mxm'
    let str2: string = `mxm`
    
  • Array类型

    let arr1: number[] = [1,2,3,4,5]
    let arr2: Array<number> = [1,2,3,4,5]
    let arr3: (string | number)[] = [1,2,3,'4']
    
  • 元祖类型 Tuple

    元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同,每个位置赋值时类型必须一一对应,不能多也不能少

    let tuple1:[string,number,boolean] = ['1',2,false]
    let tuple2:[string,number,boolean] = ['1',2,false,false]//error
    
  • 枚举类型 enum

    默认情况下从0开始编号,也可以手动指定,但是只可以递增,不可以递减,可以由枚举的值得到它的名字

    const Roles = {
      super,
      admin = 3,
      user
    }
    console.log('enum',Roles.super,Roles[3])// admin
    
  • Any类型

    什么类型都可以进行赋值,但是不推荐使用,无意义

    let value: any = '11111'
    let anyArr: any[] = [1,2,3,'4']
    
  • Void类型

    表示没有任何类型,可以赋值undefined、null,一般函数什么也不返回的时候为void类型

    let v: void = undefined
    let v: void = null
    const testfun = (test: string): void => {console.log(test)} 
    
  • undefined、null类型

    undefinednull两者各自有自己的类型分别叫做undefinednull,默认情况下null和undefined是所有类型的子类型,就是说可以把他们赋值给number类型、string类型的变量,前提是在tsconfig.json中没有启用strictNullChecks,否则null和undefined只能赋值给void和它们各自

    let u: undefined = undefined;
    let n: null = null
    let num: number = undefined
    let v: void = undefined 
    
  • Never类型

    永远也不可能存在的类型,一般抛出异常、不会有返回值的函数表达式、箭头函数表达式的返回值类型都是never类型,变量 也可能是never类型,never类型是任何类型的子类型,没有任何类型是nerver的子类型,即使any也不可以赋值给never类型

    const errorFun = (message: string): never => {throw new Error(message)}
    const mapFun = (): never => { while(true){} }
    
  • Symbol类型

    概述

    为一个对象添加属性时,保证属性名不冲突,es6中引入了symbol原始类型,使对象中的属性名是一个独一无二的值;所有对象的属性名有两种类型:字符串与symbol;symbol是原始类型不能添加属性,它是类似于字符串的数字类型;symbol可以接收一个字符串作为参数,表示对symbol的描述;

    let s1 = Symbol("dog")
    let s2 = Symbol("cat")
    console.log('s',s1,s2)//Symbol("dog"),Symbol("cat")
    s1 === s2 //false
    //symbol参数是对象时,会调用对象的tostring()的方法
    const obj = {
      toString() {
        return 'abc';
      }
    };
    const sym = Symbol(obj);
    sym // Symbol(abc)
    //Symbol 值不能与其他类型的值进行运算,可以转为string类型、boolean类型
    let s3 = Symbol("string")
    String(s3)
    s3.toString()
    Boolean(s3)
    
    获取描述

    传给Symbol的参数就是对Symbol的描述

    let s = Symbol('describe')
    s.description//describe
    
    属性名的遍历
    let s1 = Symbol('key1')
    let s2 = Symbol('key2')
    const obj = {[s1]:1,[s2]:2,key3:3}
    for (key in obj){
    	console.log(key)//'key3'
    }
    for(key of obj){
      console.log(key)//'key3'
    }
    Object.keys(obj)//['key3']
    Object.getOwnPropertyNames(obj)//["key3"]
    JSON.stringify(obj)//"{"key3":3}"
    Object.getOwnPropertySymbols(obj)//[Symbol('key1'),Symbol('key2')]
    Reflect.ownKeys(obj)//[Symbol('key1'),Symbol('key2'),'key3']
    
    Symbol.for()、Symbol.keyFor()

    Symbol.for():它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建一个以该字符串为名称的 Symbol 值,并将其注册到全局 ,可以用在不同的 iframe 或 service worker 中取到同一个值。

    let  s1 = Symbol.for('foo');
    let  s2 = Symbol.for('foo');
    s1 === s2 //true
    

    Symbol.keyFor():返回一个已登记的 Symbol 类型值的key

    let s1 = Symbol.for("foo");
    Symbol.keyFor(s1) // "foo"
    
    let s2 = Symbol("foo");
    Symbol.keyFor(s2) // undefined
    
    模块的 Singleton 模式

    暂时无记录

    内置的 Symbol 值

    暂时无记录

    非原始类型
  • Object类型

    非原始类型

    let obj = {
        name : 'ma'
    }
    function getobj(obj1: object): void{
        console.log(obj1)
    }
    getobj(obj)
    
类型断言

类型断言是自己比编译器更清楚变量是什么类型,知道自己在干什么,类似于类型转换(不进行数据检查和结构),写法有两种:

const getLength = (param: string|number): number => {
  console.log((<string>param).length)
  return (param as string).length
}
参考链接
  • TypeScript入门教程
  • TypeScript中文网

你可能感兴趣的:(TypeScript,typescript,es6)