typescript - Typen HTMLButtonElement kan inte konverteras till typen T
Jag leker med TypeScript-kod på leksaksplatsen med koden nedan. Koden verkar vara okej för mig men den ger ett fel
"Typen HTMLButtonElement kan inte konverteras till typen T"
class DomFactory {
create<T extends HTMLElement>(args): T {
return document.createElement('button') as T;
}
}
Svar #1
Du skickar den generiska typen och konverterar sedan resultatet till denna typ. Detta är föråldrat eftersom den returnerade typen alltid är HTMLButtonElement. Så detta är egentligen inte meningsfullt.
Det finns ett fall när du normalt fortfarande vill att typen ska härledas. Detta händer när du vill skapa en instans av en viss klass med en fabrik (och därför inte vet den returnerade typen). Detta är exemplet från de officiella dokumenten:
class BeeKeeper {
hasMask: boolean;
}
class ZooKeeper {
nametag: string;
}
class Animal {
numLegs: number;
}
class Bee extends Animal {
keeper: BeeKeeper;
}
class Lion extends Animal {
keeper: ZooKeeper;
}
function createInstance<A extends Animal>(c: new () => A): A {
return new c();
}
createInstance(Lion).keeper.nametag; // typechecks!
createInstance(Bee).keeper.hasMask; // typechecks!
Här är den returnerade typen den som skickas.
