Typescript: Kan inte anropa ett uttryck vars typ saknar en anropssignatur. Typen 'Number' har inga kompatibla anropssignaturer


Jag vet att den här typen av frågor har ställts tidigare, men det är fortfarande inte klart för mig.

Jag är nybörjare och jag försökte lära mig import och export i TypeScript. Så jag har skrivit följande kod. Vänligen ta en titt på detta.

Jag har tre filer:-

 1.animal.ts  
 2.bird.ts 
 3.application.ts

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")
    }
}

fågel.ts

import {Animal} from "./animal"

export class Bird extends Animal{

    constructor(name:string,age:number){
        super(name,age)
    }

    fly(){
        console.log("I can fly also")
    }
}

applikation.ts

import { Animal } from "./animal"
import { Bird } from "./bird"

class Application {

    constructor() {
        console.log("Hi i am a bird !!")
    }
}

var animal = new Animal("Rhino", 10);
var bird = new Bird("Pigeon", 3)

animal.age();   //Cannot invoke an expression whose type lacks a call signature. Type 'Number' has no compatible call signatures
animal.name();  //Cannot invoke an expression whose type lacks a call signature. Type 'String' has no compatible call signatures.

bird.age();     //Cannot invoke an expression whose type lacks a call signature. Type 'Number' has no compatible call signatures
bird.fly();
bird.sleep();

Hur löser jag det här problemet? och vad betyder det här felet egentligen?

Svar #1

bird.age() fungerar inte eftersom det är ett nummer. console.log(bird.age) kommer att fungera.

bird.fly() fungerar eftersom det är en funktion.

Liknande mönster för alla andra frågor.

Svar #2

Ditt problem ligger inte med import eller export, det ser OK ut. Detta:

Cannot invoke an expression whose type lacks a call signature. Type 'Number' has no compatible call signatures

säger allt. Du använder age(), så du använder age som om det är en funktion (har en anropssignatur). Men age är ett nummer - du kan lägga till det, skriva ut det, etc., men du kan inte "anropa" det. Det är därför de andra raderna inte misslyckas - du kan anropa dem korrekt.

Relaterade artiklar