首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当作为变量类型时,接口和InstanceType<typeof Class>有什么不同?

当作为变量类型时,接口和InstanceType<typeof Class>的主要区别在于:

  1. 接口:接口是一种抽象的定义,用于描述对象的形状和行为。它可以定义对象的属性、方法和方法签名,并且可以被其他类型实现或扩展。接口不直接对应于任何实际的值,只是为了类型检查和静态分析。
  2. InstanceType<typeof Class>:InstanceType是一个内置的 TypeScript 类型工具,用于获取给定类的实例类型。它接受一个类的构造函数作为参数,并返回该类的实例类型。InstanceType<typeof Class>在类型上更加具体和精确,表示该类的实例的类型。

总结: 接口是一种抽象的定义,用于描述对象的形状和行为,而InstanceType<typeof Class>是用于获取给定类的实例类型的类型工具。接口更加通用和抽象,可以用于描述任意对象的形状和行为,而InstanceType<typeof Class>更加具体和精确,用于表示特定类的实例类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java中抽象类(abstract class接口(interface)什么不同

尽管抽象类接口有着相似之处,但也有明显的区别。下面将详细介绍这两个概念的不同点。 1、抽象类 抽象类是指不能直接实例化的类,只能被用来派生其他类,它被设计成为仅包含可继承的方法、属性变量。...2、接口 接口抽象类一样也是一种特殊类型的类,它仅声明了一组或者多组方法以及常量,可以被看作是一个对外公开的 API 契约。接口在 Java 中属于比抽象类更加抽象的概念。...常见的接口特征如下: 接口中只能包含常量、方法的声明(而非实现)以及内部定义的其他类型(如枚举类型或内部类)。...接口中只有常量,没有变量。声明一个常量必须使用 static 关键字,一般再加上 final 关键字使其成为常量。...3、抽象类接口的区别 抽象类接口都可以理解为一种模板或契约,它们之间虽然相似点,但也存在很多不同之处。

50620

编写TypeScript工具类型,你需要知道的知识

再定义一个接口,为成员都加上可选修饰符吗?这种方法确实可行,但接口几十个成员呢?此时,工具类型就可以派上用场。 type Partial = {[K in keyof T]?...partial : T[K] } 如果你是第一次看到以上的写法,可能会很懵逼,不知道发生了什么操作。不慌,且往下看,或许当你看完这篇文章再回过头来看,会发现原来是这么一回事。...“"banana"”分配给类型“"apple"” 下面以字符串字面量类型作为例子: 字符串字面量类型允许指定的字符串作为类型。...A[K] : A[K]|B[K] } 通过 Filter 筛选出公共的成员联合类型 "name"|"age" 作为映射类型的集合,公共部分可能会存在类型不同的情况,因此要为成员保留两者的类型。...class C { x = 0; y = 0; } type T0 = InstanceType; // C type T1 = InstanceType;

1.4K50
  • TypeScript 强大的类型别名

    类型别名有时接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型。...原理是令T'U'分别为T U 的实例,并将所有类型参数替换为any,如果T'能赋值给 U',则将有条件的类型解析成 X,否则为Y。...typeof 在 JS 中 typeof 可以判断一个变量的基础数据类型,在 TS 中,它还有一个作用,就是获取一个变量的声明类型,如果不存在,则获取该类型的推论类型。...R : any; 看一下官方的例子: class C { x = 0; y = 0; } type T20 = InstanceType; // C type...自定义类型别名 下面是一些可能会经常用到,但是 TS 没有内置的一些类型别名: Omit 有时候我们想要继承某个接口,但是又需要在新接口中将某个属性给 overwrite 掉,这时候通过 Pick

    3.4K20

    TypeScript进阶(三)类型演算与高级内置类型

    例如,我们可以使用联合类型来定义一个变量可以接受多种不同类型的值:let x: number | string;这样,变量 x 可以接受 number 类型或 string 类型的值。...例如,在开发过程中,我们经常需要对输入参数进行验证处理。通过使用条件类型映射类型等工具,我们可以根据输入参数的不同来选择不同的处理逻辑,并根据已有对象定义新的对象类型。...操作符谈到 TypeScript 类型演算typeof、keyof in 是三个非常重要的操作符关键字。它们在类型系统中扮演着不同的角色,用于获取类型信息、操作对象属性遍历联合类型成员。...通过 keyof 关键字,我们可以在编译获取对象属性名,并将其作为一个类型注解或类型声明使用。...= InstanceType;// PersonInstance 的类型为 Person在上述代码中,InstanceType 获取了构造函数

    30010

    【TS 演化史 -- 17】各文件的JSX工厂 、有条件类型映射类型修饰符

    never类型是 TypeScript 的底层类型,表示从未出现的值的类型。 分布式有条件类型 那么,为什么e 条件类型never类型的组合是有用的呢?它有效地允许咱们从联合类型中删除组成类型。...咱们定义一个EmailAddress类型别名,它表示四种不同类型的联合,包括nullundefined类型 type EmailAddress = string | string[] | null |...User类型两个属性,nameemail,因此咱们最终得到一个带有“name”“email”字符串字面量类型的联合类型: type NonNullableUserPropertyKeys = {...有条件类型中的类型推断 有条件类型支持的另一个有用特性是使用新的infer关键字推断类型变量。...咱们需要传递类型作为类型参数T的参数,而不是值;这就是为什么ReturnTypeReturnType是不正确的。

    2.5K20

    iOS AVDemo(3):音频封装,采集编码并封装为 M4A丨音视频工程示例

    @end NS_ASSUME_NONNULL_END 上面是 KFMP4Muxer 的接口设计,除了初始化方法,主要是获取封装配置以及封装错误回调的接口,另外就是开始写入封装数据、取消写入封装数据...在上面的添加封装数据接口中,我们使用的是依然 CMSampleBufferRef[1] 作为参数类型,再次体现了它作为 iOS 音视频处理 pipeline 中的流通货币的通用性。...if (_muxWriter) { return YES; } // 使用 AVAssetWriter 作为封装器,类型使用 AVFileTypeMPEG4。...appendSampleBuffer:videoSample]; CFRelease(videoSample); } } - (void)_avInterLeavedSample { // 同时封装音频视频...带封装的数据既有音频又有视频,就需要根据他们的时间戳信息进行交织,这样便于在播放该音视频提升体验。 4)音视频数据写入封装。

    56620

    一文看懂TypeScript工具类型

    在学习工具类型之前,我们先学学工具类型所用到的基础知识,基础知识掌握牢固后,看懂工具类型自然水到渠成。...联合类型赋值的时候是相联合类型的综合。子类型与父类型联合的结果是父类型,任何类型与never联合是任何类型。对于类、接口等对象的联合,可赋的值是其中任意一个,但访问只能访问所有类型的共有属性方法。。...类型查询 在JS中 typeof 可以判断一个变量类型,TS对 typeof 做了扩展,在类型别名 type 等号右侧的 typeof 获取的是变量在TS中定义的类型。...= typeof '123'; // Error 需要是个变量 这里认为'123'已经是字面量类型了 无法查询该类型类型 type T2 = typeof a; // string type T3...T2 = InstanceType; // A type T4 = InstanceType; // B type T5 = InstanceType

    17510

    idinstancetype的区别

    在开发当中,idinstancetype都是我们常见的类型,那么这两者什么异同点呢?...而instancetype也是一个可以指向所有类型的实例变量指针。...不同点 我们在项目开发过程中,一般是覆写或者自定义一个类的实例对象的初始化方法的时候,才会用instancetype作为返回值类型,除此之外,在其他的地方根本不会用到instancetype。...那么,为什么在实例对象的初始化方法中必须使用instancetype作为返回值类型呢? 我们来看一个例子。...在运行期才会确定对象的真实类型instancetype作为返回值类型的时候,编译期间会报警告,提示接收对象的指针类型不匹配,所以说instancetype比id多了一个在编译期通过编译器检测变量真实类型的功能

    1.6K10

    GB代码规范1.0

    局部的变量要初始化 属性默认的值 所以我们不必须对于属性进行初始化 我之前遇到的一个BUG就是int类型没有初始化给我默认Nan造成崩溃 建议的写法 int index = 0; 不建议的写法 int...事先的创建一个对象 可以精简代码 执行方法很多 用变量替换 建议的写法 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults...的监听 不释放容易造成内存释放崩溃 养成习惯把按照方法功能到分类里面 对于一些按照功能类型的方法划分在一个分类里面 分类之前类写在同一个文件 建议的写法 @interface GBPerson :...对于一些自己不确定的可以使用try catch 对于不知道后台返回什么类型的 可以使用try catch 建议的写法 int index = 0; @try { NSArray *array = obj...c : d : y; 三元运算符的第二个参数(if 分支)返回条件语句中已经检查的对象一样的对象的时候,下面的表达方式更灵巧: 推荐: result = object ?

    1.2K20

    NSObject头文件解析 消息机制 Runtime解读 (一)

    Class作为成员变量, 稍后我们再具体看看Class的头文件 } //load & initilize方法我们不常用到, 进一步的说明大家可以看下这个地址:http://www.cocoachina.com...接口我们挑几个重点讲下: instanceType id的区别 关于返回类型, 可以看到instanceType & id两种, 那有什么区别呢?...instanceType上面有讲过是关系型或者说是关联对象, 具体什么作用呢?...使用instanceType类型返回的对象编译器能找到他的属性方法 所以使用InstanceType是为了能更好的帮助编译器找到对象的属性方法, 减少不必要的错误 Copy MutableCopy...: id object_getIvar(id obj, Ivar ivar) 这3个函数合起来可以读取修改成员变量(不能获取@property修饰的属性变量), 举例: 我们一个ClassA, 在类中添加一个私有成员属性

    1.3K31

    一份走心的iOS开发规范

    通知掩码常量(通常指那些可以进行按位运算的枚举值) 除外。 通俗的讲,自我指涉是指在变量末尾增加了自己类型的一个后缀。...属性/函数/参数/变量/常量/宏 的命名应该具有上下文或者全局的一致性,相同类型或者具有相同作用的变量的命名方式应该相同或者类似。...具体参考本人之前的文章《为什么不能在initdealloc函数中使用accessor方法》、、 (2.5) Block规范 【必须】调用block需要对block判空。...即,post通知,center会一直等待所有的observer都收到并且处理了通知才会返回到poster。...(2.11) 对象判等规范 isEqual:方法允许我们传入任意类型的对象作为参数,如果参数类型receiver(方法调用者)类型不一致,会返回NO。

    12K145

    id类型instancetype类型

    另外考虑兼容swift,还是用instancetype好 可以通过声明instancetype类型作为一个拥有关联类型的方法的返回类型。...在其他方面,拥有关联返回类型的方法与返回id类型的方法是一致的。 ---- 用instancetype代替id什么好处?...用instancetype可以给自定义方法一个类似alloc/init的行为,这个主要方便于构造函数 使用id,本质上不会有任何类型检查。...使用instancetype,编译器IDE知道返回的是什么类型的东西,并且更好地检查你的代码自动补全代码。...如果你习惯去写instancetype作为返回类型的话,你每次都会得到正确的类型。 一致性: 最后,想象你把这些东西都放在一起:你想要一个init方法一个类工厂。

    1.9K10

    iOS-代码规范

    避免使用全局变量,类成员(class member)来传递信息,尽量使用局部变量参数。 在一个类里面,经常会有传递某些变量的情况。...但并不是说一定不能写注释,以下三种情况比较适合写注释: 公共接口(注释要告诉阅读代码的人,当前类能实现什么功能)。 涉及到比较深层专业知识的代码(注释要体现出实现原理思想)。...比如类与类之间的耦合程度,设计的可扩展性,复用性,是否可以将某些方法抽出来作为接口等等。 三. iOS规范 变量 ---- 1....(在iOS中,抽象接口即协议),让不同类型的对象遵循这个协议,从而拥有相同的功能。...所有返回类对象实例对象的方法都应该使用instancetypeinstancetype关键字作为返回值的时候,可以让编译器进行类型检查,同时适用于子类的检查,这样就保证了返回类型的正确性(一定为当前的类对象或实例对象

    2.2K20

    YYCache 源码解析(二):磁盘缓存的设计与缓存组件设计思路

    作为YYCache的第二级缓存,它与第一级缓存YYMemoryCache的相同点是: 都具有查询,写入,读取,删除缓存的接口。...在以数据库存储缓存 不过虽然调用了两次,我们可以从传入的参数是差别的:第二次filename传了nil。...:则把data写入数据库里 filename不为空,说明在外部写入该缓存的文件:则不把data也写入了数据库里 下面结合代码看一下: //数据库存储 - (BOOL)_dbSaveWithKey:...而sqlite3_bind_textsqlite3_bind_int是绑定函数,可以看作是将变量插入到字段的操作。...为什么磁盘缓存使用的是信号量(dispatch_semaphore)? dispatch_semaphore 是信号量,但信号总量设为 1 也可以当作锁来。

    2K20

    iOS 代码规范

    避免使用全局变量,类成员(class member)来传递信息,尽量使用局部变量参数。 在一个类里面,经常会有传递某些变量的情况。...但并不是说一定不能写注释,以下三种情况比较适合写注释: 公共接口(注释要告诉阅读代码的人,当前类能实现什么功能)。 涉及到比较深层专业知识的代码(注释要体现出实现原理思想)。...比如类与类之间的耦合程度,设计的可扩展性,复用性,是否可以将某些方法抽出来作为接口等等。 三. iOS规范 变量 1....(在iOS中,抽象接口即协议),让不同类型的对象遵循这个协议,从而拥有相同的功能。...所有返回类对象实例对象的方法都应该使用instancetypeinstancetype关键字作为返回值的时候,可以让编译器进行类型检查,同时适用于子类的检查,这样就保证了返回类型的正确性(一定为当前的类对象或实例对象

    2.4K20
    领券