javascript - Hur man definierar en funktion med "this"-kontext i typescript


type Animal = {
    name: string
}

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

console.log(getBear().name)

Kan någon hjälpa mig med detta, jag kan inte kalla på getBear-funktionen

Svar #1

Du kan inte göra detta eftersom this-kontexten för getBear inte är bunden till ett Animal när du anropar det. Att bara säga till TypeScript att this är ett Animal räcker inte, du måste också anropa din funktion med den kontexten.

I det här fallet skulle du behöva kalla på det så här.

type Animal = {
    name: string
}

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

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

Svar #2

Du kan kalla detta på 3 sätt:

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)

Relaterade artiklar