unknown 与 any 的区别
unknown 类型的变量是不能调用方法的(可以保证安全)
any 就跟没有写类型一样
object 与 Object 的区别
object 代表所有非值类型(非原始类型)的类型,例如 数组 对象 函数等
Object 可以给任意值赋值
type 和 interface 的区别
interface 一定以对象的方式开始
type Condition = (n: number) = > boolean interface Condition {
(n:number):boolean ;
}
区别:
1.interface 可以使用 extends/implements 继承;type 不能
注意:implements 是继承其他 ts 类型,而 extends 是继承真正的类(js 代码)
interface Person{
run(type:boolean):boolean
}
interface H{
set():void
}
class A{
params:string
constructor(params:string){
this.params = params
}
}
//也可以使用继承再使用
class Man extends A implements Person,H{
run(type:boolean):boolean{
return type
}
set(){
//啥也没有,这就是用接口去描述类
}
}
type 如果要扩展类型可以使用 &
type s = {
name: string;
}
& {
age: number;
}
2.重复定义处理,interface 会合并,type 会导致错误
interface
interface A {
name: string | number;
}
interface A {
age: number;
} //name跟age会进行合并
type
type Animal = {
kind: string;
}
// 以下这行代码会导致错误
type Animal = {
sound: string;
}
介绍一下 never 类型
never 类型通常用于表示不可能出现的情况,它可以用于增强代码的类型安全性和可读性。
当一个变量被推断为 never 类型时,表示该变量的类型不能是任何其他类型,即不存在任何值与其兼容。
这个类型通用会用于报错
如何定义类数组
函数的 arguments 就是一个类数组
function test() {
arguments; //类数组
}
定义
interface IArguments {
[index: number]: any;
length: number;
callee: Function;
}