V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Xiancai123
V2EX  ›  前端开发

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

  •  
  •   Xiancai123 · 95 天前 · 540 次点击
    这是一个创建于 95 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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=
    工作不卷,真朝九晚五,不加班,五险两金拉满交的。带有一定科研性质的单位,单位不错,有意向的联系我。

    4 条回复    2022-05-23 08:43:32 +08:00
    yimity
        1
    yimity  
       95 天前
    没有任何问题,你看看是不是你 ts 版本的问题。我的是 4.5.5
    Xiancai123
        2
    Xiancai123  
    OP
       95 天前
    @yimity 那就是我手法有问题了 对 ts 不够深入
    zbinlin
        3
    zbinlin  
       92 天前
    你在 Test.d.ts 里用的是 Named exports ,但在 main.ts 里用的是 default import ,实际没有 import 到 `SayNameTest`,因此报错了,你可以在 main.ts 里 `import { SayNameText } from 'test'` 或者 在 Test.d.ts 里 `export default SayNameTest`。
    imswing
        4
    imswing  
       83 天前
    学历是硬门槛吗?
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2336 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:19 · PVG 12:19 · LAX 21:19 · JFK 00:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.