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=
工作不卷,真朝九晚五,不加班,五险两金拉满交的。带有一定科研性质的单位,单位不错,有意向的联系我。
1
yimity 2022-05-10 17:13:58 +08:00
没有任何问题,你看看是不是你 ts 版本的问题。我的是 4.5.5
|
2
Xiancai123 OP @yimity 那就是我手法有问题了 对 ts 不够深入
|
3
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`。
|
4
imswing 2022-05-23 08:43:32 +08:00
学历是硬门槛吗?
|