You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

初学TypeScript导入导出时遇报错:类型'Number'无兼容调用签名

排查TypeScript "Cannot invoke an expression whose type lacks a call signature" 错误

作为刚接触TypeScript导入导出语法的初学者,碰到这个报错很正常,我帮你梳理下最可能的触发场景,结合你给出的代码片段来分析:

先确认你提供的animal.ts代码是没问题的:

export class Animal { 
  name:string 
  age:number 
  constructor(name:string,age:number){ 
    this.name=name; 
    this.age=age 
  } 
  sleep(){ 
    console.log("I do sleep") 
  } 
  eat(){ 
    console.log("I do eat") 
  } 
}

结合你提到的bird.ts开头是import {An...,以及报错信息,我列出几个高频踩坑点:

1. 导入语法拼写/路径错误

如果你的bird.ts里导入Animal类时写错了类名(比如写成Animals)、路径不对,或者漏写了花括号,TypeScript会把找不到的标识符识别为异常类型,后续调用时就会触发这个报错。

正确的导入写法应该是:

import { Animal } from './animal'; // 注意类名大小写匹配,路径和文件位置对应

2. 混淆Number与number类型

报错里明确提到Type 'Number' has no compatible call signatures,这是初学者最容易犯的类型混淆错误:

  • 小写number是TypeScript的基本数值类型,用来表示普通数字
  • 大写Number是JavaScript的构造函数,用来创建Number对象(几乎不会在业务代码里用到)

比如你可能在bird.ts里写成了这样:

import { Animal } from './animal';

class Bird extends Animal {
  age: Number; // 错误:用了大写Number而非小写number
  constructor(name: string, age: Number) {
    super(name, age); // 这里传入的Number类型和Animal构造函数要求的number类型不兼容
  }
}

修正后的写法:

import { Animal } from './animal';

export class Bird extends Animal {
  constructor(name: string, age: number) {
    super(name, age);
  }
  fly() {
    console.log("I can fly");
  }
}

3. 误把属性当成方法调用

如果在application.ts里实例化类后,不小心把属性当成方法调用,也会触发这个报错:

import { Bird } from './bird';

const myBird = new Bird("Sparrow", 2);
myBird.age(); // 错误:age是number类型属性,不是可调用的方法

修正方式:去掉括号,直接访问属性即可:console.log(myBird.age)

如果以上场景都不符合你的情况,把bird.ts和application.ts的完整代码贴出来,我能更精准地帮你定位问题~

内容的提问来源于stack exchange,提问作者AConsumer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:40:29