typescript - Proč moje metoda třídy nedokáže získat typy parametrů ze svého rozhraní?
Napsal jsem níže tento kód, abych ukázal svůj problém
type MyFunction<T> = (req: string, res: number) => T;
interface ITest {
store: MyFunction<void>;
}
class Test implements ITest {
store(req, res) { //req, res got implicit any type
req.codePointAt()
res.toFixed()
}
}
Proč, když implementuji své rozhraní ITest na své třídě Test, stále není možné odvodit typy parametrů?
Odpověď č. 1
Rozhraní ITest.store musí implementovat (req: string, res: number) => void;. Metoda store ve vašem testu to technicky splňuje. Její signatura je (req: any, res: any) => void. Typy any postačují pro string i number.
Když použijete implements, váš objekt/třída/etc. souhlasí s plněním požadavků rozhraní. To znamená, že rozhraní nedělá žádná rozhodnutí o typech. Je to odpovědnost implementátora. Takže zpět k výše uvedenému, Test souhlasí s implementací rozhraní ITest. Jeho metoda store má v současnosti signaturu (req: any, res: any) => void. Protože any splňuje string a number, efektivně splňuje rozhraní ITest.
Odpověď č. 2
store není funkce, je to vlastnost, která má typ, jež je funkcí.
Pokud chcete zachovat typ, měli byste jej deklarovat takto:
class Test implements ITest {
store: MyFunction<void> = (req, res) => {
req.codePointAt();
res.toFixed();
}
}
A teď codePointAt chce parametr :)
