ts学习(6)

  1. never类型可以做穷尽性检查。nerver类型表示一个不存在的状态,never类型可以分配给每个类型,但是没有任何类型可以分配给never,除了never本身。
type Animal = 'lion' | 'cat'
function checkAnimal(animal:Animal){
  swicth(animal){
    case 'lion':
      return xxx;
    case 'cat':
      return xxx;
    default:
      const other:never = animal;
      return other;
    }
}
  1. 函数的类型描述
    2.1函数类型表达式
fn:(a:string) => void

//例子
type Greetfunction =(s:string)=>void
function greeter(fn:Greetfunction){
  fn('hello world')
}

function printToConsole(s:string):void{
  console.log(s);
}

greeter(printToConsole);

2.2调用签名
在js中函数除了可调用之外,函数还可以有属性。但是函数类型表达式的语法无法声明属性,如果想用属性来描述可调用的东西,可以在对象中,写一个调用签名。

type Describablefunction={
  description:string;
  (someArg:number):boolean
}

function doSomething(fn:Describablefunction){
  console.log(fn.description+'returned'+fn(6));
}

function fn1(n:number):boolean{
  return !!n;
}
doSomething(fn1);

注意:使用类型签名定义函数类型的时候用的是冒号而不是箭头
2.3构造签名

class Ctor{
  s:string;
  contructor(s:string){
    this.s=s;
  }
}
type SomeContructor={
  new (s:string):Ctor
}

function fn(ctor:SomeContructor){
  return new ctor('hello');
}
const f =fn(Ctor);
console.log(f.s);

2.3调用签名和构造签名结合使用

interface CallOrContructor {
    new (s:string):Date;
    (n?:number):string;
}

function fn(date:CallOrContructor){
  const d = new date('2023-03-29');
  const n = date();
}

你可能感兴趣的:(ts学习(6))