ts笔记(二)

141 阅读2分钟

今天的笔记继续写ts类型:

1、never类型:是用来占位的,跟js里面的null差不多,空类型

let foo: never; 

翻译:var foo =null;

2、类型值推导:

type Adder = (a:number,b:number) => number;
let foo:Adder=(a,b) => a + b;
console.log(foo(1,2))

// 以上可以翻译如下:
function Adder(a:number,b:number){
    return a+b
}

let foo = Adder(1,2)
type Adder = (a: number, b: number) => number;
let foo: Adder = (a, b) => {
  a = 'hello'; // Error:不能把 'string' 类型赋值给 'number' 类型string 哦
  return a + b;
};

3、type NonNullablesss = T extends null | undefined ? never : T;

NonNullablesss :T 指的是NonNullablesss 索引类型,

T extends null | undefined ? never : T;
这个意思是值T继承自null,类型是undefined吗?是的话那就是never,不是的话就是T。
type NonNullablesss<T> = T extends null | undefined ? never : T;
let demo1:NonNullablesss<number> = 2;
let demo2:NonNullablesss<string>
let demo3:NonNullablesss<undefined | null>
console.log(typeof demo1)
console.log(demo1)

// 我写这个示例的时候,ts要求使用定义的变量必须赋值

4、type 别名

type user ={   
 name:"zxl",    
 age:12
}  
// type是类型别名,类似于var

5、infer:表示在 extends 条件语句中待推断的类型变量

infer之前在js里面没用到过,突然看到这个关键字还有点懵逼,,,但是通过代码的形式来理解就能正常理解了(但我还是没完全理解)
type ParamType<T> = T extends (...args: infer P) => any ? P : T;

6、索引签名

用字符串访问 JavaScript 中的对象
  let foo: any = {};
  foo["obj"] = 'World'; 
  console.log(foo["obj"]); //  World

7、as类型断言:指定一个值的类型

interface Foo{
    bar:number;
    bas:string
}
const foo={} as Foo;
foo.bar = 123;
foo.bas ='hello';

console.log(foo)

指定foo的类型是Foo。往foo里添加了两个属性bar、bas

8、interface

interface Point {
    x: number;
    y: number;
    z: number; 
  }
//  此处声明的x,yxz要和interface里面要一一对应  
class MyPoint implements Point {
    x: number =12;
    y: number = 13;
    z:number = 15
}
let foo: Point = new MyPoint();
console.log(foo)

9、strictPropertyInitialization:在赋值前使用了变量“xxxx”:这个是ts的2.7的版本问题,确保变量在声明前赋值