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

这种在TS中使用构造函数实现接口的方式是错误的还是正确的?

在TS中使用构造函数实现接口的方式是错误的。

在TypeScript中,接口用于描述对象的形状,而构造函数是用于创建对象的函数。接口不能直接描述构造函数,因为构造函数是一个特殊的函数,它具有创建对象的能力,而不是描述对象的形状。

如果想要描述构造函数的类型,可以使用类来代替接口。类可以描述对象的形状,并且具有构造函数的能力。可以通过定义一个类来实现接口的需求。

例如,假设有一个接口Person,描述一个人的属性:

代码语言:txt
复制
interface Person {
  name: string;
  age: number;
}

class PersonImpl implements Person {
  constructor(public name: string, public age: number) {}
}

在上面的例子中,PersonImpl类实现了Person接口,并且通过构造函数来创建一个具有相应属性的对象。

总结:在TS中,使用构造函数实现接口的方式是错误的,应该使用类来实现接口的需求。

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

相关·内容

PHPstrpos函数正确使用方式

首先简单介绍下 strpos 函数,strpos 函数查找某个字符字符串位置,这里需要明确这个函数作用,这个函数得到位置。 如果存在,返回数字,否则返回 false。...而很多时候我们拿这个函数用来判断字符串是否存在某个字符,一些同学使用姿势这样 // 判断‘沈唁志博客’是否存在‘博客’这个词 if (strpos('沈唁志博客', '博客')) {...必须使用===false 必须使用===false 必须使用===false 重要事情说三遍,正确使用方式如下 // 判断‘沈唁志博客’是否存在‘博客’这个词 if (strpos('沈唁志博客...,时候为智商讨个说法了,事实上输出’不存在’,细心童鞋会发现这个 1 不带引号,strpos 第二个参数必须字符串型,因此,如果你循环或者其他情况下调用 strpos 函数,而且不确定第二个参数类型...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHPstrpos函数正确使用方式

5.2K30

Java 到底应该用接口类型 还是实现类类型去引用对象?

如题,Java 到底应该用接口类型 还是实现类类型去引用对象?首先贴出答案: 应该优先使用接口而不是类来引用对象,但只有存在适当接口类型时 。...标题描述情况实际应用代码: //implA 为接口 ClassB为其实现类 implA A=new ClassB();//接口类型引用变量A 去接收对象地址 //或者 ClassB A=new...,若我们仍然使用接口来引用对象时PetInterface p = new Cat(),那些仅仅存在实现方法,无法直接调用即p.batheSelf()无法调用会报错。...所以这时使用Cat p = new Cat()即类来引用是更好。 也就是说,使用接口类去引用对象是有前提条件——即实现全是接口方法实现,没有自己单独方法。...当然也存在向下转型, //p.batheSelf();替换为下面形式 ((Cat)p).batheSelf();//向下转型,可正常调用执行 参考文章: Java 到底应该用接口类型 还是实现类类型去引用对象

1.6K30
  • 【Linux】解析【进程PCB】如何实现【信号处理方式(抵达未决阻塞)】

    注意,阻塞和忽略不同,只要信号被阻塞就不会递达,而忽略递达之后可选一种处理动作 二.信号处理动作在内核表示 1.示意图&作用机制介绍&信号集sigeset_t介绍...(pending),还有一个函数指针表示处理动作 信号集(sigeset_t): 这个类型可以表示每个信号“有效”或“无效”状态; 非0即1 阻塞信号集中“有效”和“无效”含义该信号是否被阻塞...block位图为1;阻塞状态解除后设置成0; 2.演示在三张表表示 演示: 3.如何改变信号默认实现动作 【1】实现原理:设置信号【默认处理函数】变成【自定义函数】 每个进程...PCB 都有如下图所示三张表,分别叫做 阻塞信号集,未决信号集,处理动作集 ,对应各个信号(1-64) 其中handler表存储函数指针,指向对应处理动作 原理:我们只要改变我们要改变信号...失败时,返回SIG_ERR,并设置errno以指示错误

    12610

    【DB笔试面试400】Oracle使用了如下语句创建用户LHRLDD,则对于该用户而言,以下说法错误()

    题目 Oracle使用了如下语句创建用户LHRLDD,则对于该用户而言,以下说法错误() CREATE USER LHRLDD IDENTIFIED BY LHRLDD; A、该用户口令为...LHRLDD B、LHRLDD默认表空间为USERS C、LHRLDD临时表空间为TEMP D、使用UPDATE命令可以修改LHRLDD口令 A 答案 答案:D。...本题考察创建用户命令。...创建用户时候若省略了默认表空间及临时表空间的话,则可以通过查询系统表SYS.PROPS$表来获取默认值,如下所示: SELECT * FROM PROPS$ D WHERE D.NAME IN ('...DEFAULT_TEMP_TABLESPACE', 'DEFAULT_PERMANENT_TABLESPACE'); 更改密码需要使用ALTER USER来更改,选项描述错误,所以,本题答案为D。

    1.3K20

    TypeScript六个重新让你认知知识点

    今天这篇文章由来,由我们技术群里小伙伴技术讨论时候 提出需要来提升对Ts理解而来,本文将讲述几个Ts常见并且不易理解几个知识点,简单使用就自行官网文档了!.....泛.泛    任意..任意类型,读了十遍,还是感受到了差异 */ any:任意类型,代表所有类型 泛型:泛型他就是所有类型一种类型,并不是完全所有类型,所以函数返回类型要和定义类型一摸一摸...| Animal }; 其实从语法上可以看出他们两区别,`type` 用`=`符号,既然等于,那肯定就存在多种情况,`interface`使用`{}`符号,一种`定义`形式,既然`定义...,那肯定是可以实现这种数据结构,所以`interface`可以实现功能 // 比如运用interface用来定义接口,然后实现接口功能: interface UserModelApi {     ...* 意思其实就是,共同意思(数学并集概念) 这个和extends功能上相差不大,但是extends如果类的话需要调用父函数构造函数 大致使用如下: */ interface UserApi

    34020

    如何编写 Typescript 声明文件

    创建时候都有实际代码函数体、构造函数)。...需要注意,只有在做第三方插件函数重载定义时能够放到d.ts文件,其他环境下建议将函数定义与实现放在一起(虽说配置paths也能够实现分开处理,但是那样就失去了对函数创建时约束) // index.ts...首先,接口中有两种方式可以定义一个函数,一个被定义实例上,一个被定义原型链上。...interface中使用函数重载,你会得到一个错误结果,还是拿上边build函数来说,如果在interface声明,然后class实现,那么无论怎样调用,返回值类型都会认为any。...所以正确做法class声明重载,class实现,interface中最多只定义一个any,而非三个重载。

    1.9K11

    前端入门25-福音 TypeScript声明正文-TypeScript

    那么面向对象编程,自定义了某个对象,并赋予它一定属性和行为,这样描述 Java 里很容易实现,但在 JavaScript 里却需要通过定义构造函数,对构造函数 prototype 操作等处理... JavaScript ,只能根据不同使用场景,选择 typeof,instanceof,isPrototypeOf(),对象类属性,对象构造函数名等方式来区别不同对象所属类别。..., age:1, sex:"male"}; let dog1:Dog = o; 剩余属性 这种方式最佳方式,官网对它描述字符串索引签名,但我觉得这个描述很难理解,而且看它实现方式,有些类似于...Func { (name:string):boolean; } let func:Func = function (name) { return true; } 这种使用接口方式称为声明函数类型接口...构造函数不是用类名表示,而是使用 constructor 如果有继承关系,则构造函数必须要调用super 不手动使用权限修饰符,默认 public 权限 其余方面,不管权限控制、继承写法、成员变量定义或初始化

    3.2K21

    Typescript 严格模式有多严格?

    这种情况下,你可以属性上使用显式赋值断言来帮助类型系统识别类型。 class User { username!...int≦float:也就是说intfloat子类型。 这一更严格检查应用于除方法或构造函数声明以外所有函数类型。...第一个赋值语句默认类型检查模式允许,但是严格函数类型模式下会被标记错误。...而严格函数类型模式将它标记为错误,因为它不能 被证明合理。 任何一种模式,第三个赋值都是错误,因为它 永远不合理。...用另一种方式来描述这个例子则是,默认类型检查模式T类型(x: T) => void 双变,但在严格函数类型模式T 抗变: interface Comparer { compare

    3K20

    Typescript 严格模式有多严格?

    这种情况下,你可以属性上使用显式赋值断言来帮助类型系统识别类型。 class User { username!...int≦float:也就是说intfloat子类型。 这一更严格检查应用于除方法或构造函数声明以外所有函数类型。...第一个赋值语句默认类型检查模式允许,但是严格函数类型模式下会被标记错误。...而严格函数类型模式将它标记为错误,因为它不能 被证明合理。 任何一种模式,第三个赋值都是错误,因为它 永远不合理。...用另一种方式来描述这个例子则是,默认类型检查模式T类型(x: T) => void 双变,但在严格函数类型模式T 抗变: interface Comparer { compare

    2.1K40

    盘点前端面试常见15个TS问题,你能答对吗?

    TS 开发时就能给出编译错误, 而 JS 错误则需要在运行时才能暴露。 作为强类型语言,你可以明确知道数据类型。代码可读性极强,几乎每个人都能理解。 TS 非常流行,被很多业界大佬使用。...传统JavaScript程序使用函数和基于原型继承来创建可重用组件,但这对于熟悉使用面向对象方式程序员来说有些棘手,因为他们用基于类继承并且对象是从类构建出来。...TypeScript里允许开发者现在就使用这些特性,并且编译后JavaScript可以在所有主流浏览器和平台上运行, 7 什么构造函数构造函数作用是什么? 构造函数一种特殊方法。...主要用来创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象语句中。而TypeScript构造函数用关键字constructor来实现。...如果接口用于一个类的话,那么接口会表示“行为抽象” 对类约束,让类去实现接口,类可以实现多个接口 接口只能约束类公有成员(实例属性/方法),无法约束私有成员、构造函数、静态属性/方法 // 接口可以面向对象编程中表示为行为抽象

    3.4K40

    学会这15个TS面试题,拿到更高薪offer

    TS 开发时就能给出编译错误, 而 JS 错误则需要在运行时才能暴露。 作为强类型语言,你可以明确知道数据类型。代码可读性极强,几乎每个人都能理解。 TS 非常流行,被很多业界大佬使用。...传统JavaScript程序使用函数和基于原型继承来创建可重用组件,但这对于熟悉使用面向对象方式程序员来说有些棘手,因为他们用基于类继承并且对象是从类构建出来。...TypeScript里允许开发者现在就使用这些特性,并且编译后JavaScript可以在所有主流浏览器和平台上运行, 7 什么构造函数构造函数作用是什么? 构造函数一种特殊方法。...主要用来创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象语句中。而TypeScript构造函数用关键字constructor来实现。...如果接口用于一个类的话,那么接口会表示“行为抽象” 对类约束,让类去实现接口,类可以实现多个接口 接口只能约束类公有成员(实例属性/方法),无法约束私有成员、构造函数、静态属性/方法 // 接口可以面向对象编程中表示为行为抽象

    3.7K50

    Typescript 2+迷你书 :从入门到不放弃

    Typescript难么 不夸大说,若是常规使用,上手还是相当快(有后端经验小伙伴) 浓浓C#风格,目前最新版本是typescript 2.2,我简称它为ts2 注:文章部分内容会结合实际应用经验来说...,undefind,null,String; 那么TS如何来声明一个变量或者对象亦或者声明返回对象值类型呢?...false; //--------------- TS类型会比JS稍微多一些,记得ts类型全部小写---------------// let temp1: number; // 二进制,八进制...: object; // 类似Object.create皆可以 //------ 特殊类型 // 对于异常这类永远得不到正确返回值使用: never try{ ... }catch(e):.../ 类直接声明作用域整个类内,默认为public,写不写看自己了 constructor(){ // 构造函数构造函数必须可以带上什么范围 // public

    85510

    TypeScript手记(一)

    在这两种情况,TypeScript提供了静态代码分析,它可以分析代码结构和提供类型注解。 要注意尽管有错误,greeter.js 文件还是被创建了。...就算你代码里有错误,你仍然可以使用 TypeScript。但在这种情况下,TypeScript 会警告你代码可能不会按预期执行。 接口 接口可以理解为一种规范。 让我们继续扩展这个示例应用。...这就允许我们实现接口时候只要保证包含了接口要求结构就可以,而不必明确地使用 implements 语句。...让我们创建一个 User 类,它带有一个构造函数和一些公共字段。因为类字段包含了接口所需要字段,所以他们能很好兼容。 还要注意,我声明上会注明所有的成员变量,这样比较一目了然。...,你会看到 TypeScript 里类只是一个语法糖,本质上还是 JavaScript 函数实现

    64010

    智能合约开发——TypeScript 基础(全)

    在此我们可以看到,数组定义方式之直接在变量冒号后面使用一个类型加方括号“[]”定义一个数组,元组则是方括号内编写对应数值类型。...以下any 错误示范(语法正确使用错误): let age: any; age = "str"; console.log(age) console.log(typeof age) 结果如下:...在此一定要注意,你既然声明了,那就必须要实现(若删除一个成员变量初始化),否则会报错: 运行结果如下: 八、类 8.1 类基本使用 ts 定义一个类方式很简单,使用 class...还有一个构造方法,ts 支持构造方法使用成员变量时需要使用 this 对其指向,直接使用变量名将会出错。...: 此时 Stu1 还是兼容于 Stu2 ,少可以兼容于多,若反过来不可以: 当然多个方法也没问题: 九、接口 9.1 接口一般使用 ts 中支持接口使用关键字

    80610

    TypeScript学习笔记(四)—— TypeScript提高

    五、类 传统方法,JavaScript 通过构造函数实现概念,通过原型链实现继承。而在 ES6 ,我们终于迎来了 class。...属性和方法 使用 class 定义类,使用 constructor 定义构造函数。 通过 new 生成新实例时候,会自动调用构造函数。...使用 extends 关键字实现继承,子类中使用 super 关键字来调用父类构造函数和方法。...这一章主要介绍接口另一个用途,对类一部分行为进行抽象。 6.1、类实现接口 实现(implements)面向对象一个重要概念。...7.4、泛型接口 之前学习过,可以使用接口方式来定义一个函数需要符合形状: interface SearchFunc { (source: string, subString: string)

    2.5K10

    TypeScript学习笔记(二)—— TypeScript基础

    ,未强调编译错误代码片段,默认为编译通过 注意,使用构造函数 Boolean 创造对象不是布尔值: let createdByNewBoolean: boolean = new Boolean(1)...,而 Boolean  JavaScript 构造函数。...6.1、什么接口 面向对象语言中,接口(Interfaces)一个很重要概念,它是对行为抽象,而具体如何行动需要由类(classes)去实现(implement)。...上面的例子,数字类型变量 foo 上没有 length 属性,故 TypeScript 给出了相应错误提示。 这种错误提示显然是非常有用。...若你使用这种双重断言,那么十有八九是非常错误,它很可能会导致运行时错误。 除非迫不得已,千万别用双重断言。

    5.1K20

    58. 精读《Typescript2.0 - 2.9》

    对于 TS 内部优化用户无感部分并不会罗列出来,因为这些优化都可在日常使用过程感受到。...错误 create(undefined); // 错误 而一开始 const persion: object 这种用法,将能精确推导对象类型,扩大到了整体,模糊对象类型,TS 自然无法推断这个对象拥有哪些...以上类型都内置 lib.d.ts ,不需要定义就可直接使用,可以认为 Typescript utils 工具库。...因为 TS 中所有 enum 地方都建议使用 enum 接收,下面给出例子: // 正确 { type: monaco.languages.types.Folder; } // 错误 { type...另一个感悟,我们也许要用追月刊漫画思维去学习新语言,特别是 TS 这种正在发展,并且迭代速度很快语言。

    1K20

    TypeScript 快速入门

    弱类型问题: 小项目中,我们可以通过约定方式进行设置,但是大规模项目这种约定就会存在很大隐患 //JavaScript 弱类型产生问题 const obj = {} //运行到此就会报错...","DOM"],//配置标准库 如果要使用ES2015标准就需要引入对应标准库包括DOM BOM等 命令:yarn tsc 编译整个项目,编译后js文件就会存放到dist目录 原始类型TS...,回调函数约束TS可以这样定义:(a:number,b:number) => string //函数表达式 //回调函数约束 const func2 : (a:number,b:number) =...,或者构造函数对他赋值 this.name = name; this.age = age; this.gender = true; }...与 JS混合开发,涉及到老代码等逻辑,这里就需要用到类型声明,比如一般我们使用第三方模块 没有用ts实现这时候就需要 使用模块类型声明 比如lodash第三方库,提供了类型声明文件,只需要安装即可

    1.6K10

    【万字长文】TypeScript入门指南

    //unkonwn类型不能够去调用属性跟函数,它是 any 类型对应安全类型接口和对象类型(TS -- 3) typescript ,我们定义对象方式要用关键字 interface(接口),...(stack)简单数据段,占据空间小,大小固定,属于被频繁使用数据,所以存储;引用数据类型:存储堆(heap)对象,占据空间大,大小不固定,如果存储,将会影响程序运行性能。...,赋值结束后,没办法进行一个修改和增加操作数组类型(TS -- 4)普通声明方式//类型加括号let arr:number[] = [123]//这样会报错定义了数字类型出现字符串不允许let...普通代码块和构造代码块静态代码块和构造代码块声明上少一个 static 关键字执行时机:构造代码块创建对象时被调用,每次创建对象都会调用一次,且优先于构造函数执行。...注:不是优先于构造函数执行,而是依托于构造函数,如果不创建对象就不会执行构造代码块普通代码块和构造代码块区别在于,构造代码块定于,而普通代码块方法体定义,执行顺序和书写顺序一致。

    50742

    检查JavaScript文件_TypeScript笔记18

    同时,针对.js类型检查相对宽松一些,与.ts类型检查有所不同,差异主要集中 3 方面: 类型标注方式 默认类型 类型推断策略 P.S.由于宽松策略,noImplicitAny、strictNullChecks...忽略类型错误 这些注释提供了更细粒度类型检查控制,比如只想检查部分.js文件的话,可以不开启--checkJs选项,仅在部分.js文件首行添上// @ts-check注释 二.类型标注方式 .js文件里通过...对于没在构造函数定义,或者构造函数类型为undefined或null(此时为any)属性,其类型为所有赋值右侧值类型联合 定义构造函数属性都认为一定存在,其它地方(如成员方法)出现都当作可选...类声明未出现属性都是未定义,访问就报错 构造函数等价于类 另外, ES6 之前,JavaScript 里用构造函数代替类,TypeScript 类型系统也能够“理解”这种模式(构造函数等价于...命名空间推断 .js里,类、函数和对象字面量都视为命名空间,因为它们与命名空间非常相似(都具有值和类型双重含义、都支持嵌套、并且三者能够结合使用)。

    2.4K50
    领券