5
type Animal = {
    name: string
}

function getBear(this: Animal) : Animal {
    this.name = "hi"
    return this
}

console.log(getBear().name)

Could any one help me with this , i am not able to call the getBear function

1
  • 1
    You explicitly define that this has to be Animal, but you call getBear on no object so it is void. Commented Nov 4, 2021 at 7:19

2 Answers 2

6

You can't do this because the this context of getBear is not bound to an Animal when you call it. Simply telling TypeScript that this is an Animal isn't enough, you also have to call your function with that context.

In this case you would need to call it like this.

type Animal = {
    name: string
}

function getBear(this: Animal) : Animal {
    this.name = "hi"
    return this
}

console.log(getBear.call({ name: "test" }).name)
Sign up to request clarification or add additional context in comments.

Comments

0

You can call this 3 ways:

type Animal = {
    name: string
}

function getBear(this: Animal, a: string): Animal {
    this.name = a
    return this
}

// First one 

// function.call(objcontext,parameters) calls a function under a different object context.
// read more at : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

console.log(getBear.call({ name: "test" }, "Username").name)

// Here we create a object 
//second
console.log(new (getBear as any)("Username").name)

//third
console.log(new (<any>getBear)("Praveen").name)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.