[西安 央企]TypeScript 中使用 js 的问题。js 中使用函数构造对象的模式生成一个 class,然后在 ts 中调用

2022-05-10 15:41:59 +08:00
 Xiancai123

Test.js 代码

function SayNameTest (params) {
  this.name = params.name
  this.age = params.age
}

export default SayNameTest

然后编写一个声明文件 Test.d.ts 代码

interface SayNameTestType {
    name: string, age: number
}

interface Common <T, P extends SayNameTestType[]>{
    new (...args: P): T;
}

export declare const SayNameTest: Common <
    SayNameTestType, SayNameTestType[]
>

然后在其他的 ts 文件中 new test.js 中的 SayNameTest 去生成新的对象。 mian.ts

import SayNameTest from 'test'

const sayName = new SayNameTest({name: '咸菜', age: 18})
console.log(sayName)

这时候在 main.ts 中就开始报错了,说 xxx.SayNameTest is not a constructor

也就是 ts 不认这种使用构造函数模式去封装对象的方法。

提这个问题的原因背景: 现在项目使用的语言是 ts ,但是项目要封装很多旧的 js 类库,这种旧的 js 类库基本都是大量的使用
构造函数模式去封装对象,也就是实现现在 es6 使用的 class 。而这时候要把第三方的类库转到 ts 中能用的话,写上声明文件是不管用的,求教各位大佬,这种情况你们有遇见过没?

PS: 我们单位还在招人,下面是招聘信息
要求是研究生学历,双 211 或者单研究生 985 都行。
单位名称:中煤科工西安研究院。
联系方式:
邮箱:bHBsZWU3ODMwQGdtYWlsLmNvbQ==
绿色聊天软件:bGlwYzA2MTc=
工作不卷,真朝九晚五,不加班,五险两金拉满交的。带有一定科研性质的单位,单位不错,有意向的联系我。

1177 次点击
所在节点    前端开发
4 条回复
yimity
2022-05-10 17:13:58 +08:00
没有任何问题,你看看是不是你 ts 版本的问题。我的是 4.5.5
Xiancai123
2022-05-10 17:29:20 +08:00
@yimity 那就是我手法有问题了 对 ts 不够深入
zbinlin
2022-05-13 21:13:30 +08:00
你在 Test.d.ts 里用的是 Named exports ,但在 main.ts 里用的是 default import ,实际没有 import 到 `SayNameTest`,因此报错了,你可以在 main.ts 里 `import { SayNameText } from 'test'` 或者 在 Test.d.ts 里 `export default SayNameTest`。
imswing
2022-05-23 08:43:32 +08:00
学历是硬门槛吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851992

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX