今天的笔记继续写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的版本问题,确保变量在声明前赋值