- 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;
}
}
- 函数的类型描述
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();
}
网友评论