Ich möchte den qualifizierten Typ für die Funktionen, die als Parameter angegeben werden. Dieser Typ erwartet entweder eine Funktion ohne Parameter, die eine void-Funktion (Action) zurückgibt, die Parameter enthält, oder die void-Funktion, die sie selbst zurückgibt.Typoskript: Implizite No-Parameter-Funktion Typ
Hier ist der Code, den ich verwenden möchten:
interface JsonArray extends Array<string | number | boolean | Date | Json | JsonArray> { }
interface Json {
[x: string]: string | number | boolean | Date | Json | JsonArray;
}
type Action = (arg1: string, arg2: Json | JsonArray) => void;
type ReturningAction =() => Action;
function required(arg1: string, ...validationFunctions: Array<ReturningAction | Action>) {
console.log("Test");
}
function oneOf(arg1: string): (arg1: string, arg2: Json | JsonArray) => void {
return (arg1: string, arg2: Json | JsonArray) => {
console.log("Testing");
}
}
function notEmpty(): (arg1: string, arg2: Json | JsonArray) => void {
return (arg1: string, arg2: Json | JsonArray) => {
console.log("Empty");
}
}
required("field", oneOf); // Shouldn't be accepted
required("field", oneOf("test")) // Should be accepted
required("field", notEmpty); // Should be accepted
aber es scheint, Typoskript ignoriert zusätzliche Parameter innerhalb der Funktionsdefinition als erwartet. Kann das gelöst werden?
Auch wenn ich wie folgt vorgehen:
function required(arg1: string, ...validationFunctions: Array<(arg1: string, arg2: Json | JsonArray) => void>) {
console.log("Test");
}
required("field", oneOf); // Shouldn't be accepted
required("field", oneOf("test")) // Should be accepted
required("field", notEmpty); // Shouldn't be accepted
required("field", notEmpty()); // Should be accepted
Alle aus irgendeinem Grunde akzeptiert, jedoch nur die aufgerufenen Funktionen anwenden.
Zunächst einmal, vielen Dank für Ihre Antwort! Es hilft jedoch auch nicht weiter, weil TypeScript sich nicht zu beschweren scheint, wenn ein Parameter eine Funktion mit Parametern erwartet, während Sie diese Funktion mit einer Funktion als Parameter aufrufen, der nur einen Parameter hat, ein optionales None vom Typ nie . Mache ich etwas falsch oder habe ich Recht? –
Haha, ich kann das nicht ganz verstehen; Könnten Sie der Frage, die das Problem veranschaulicht, einen Code hinzufügen? – jcalz
Angenommen, Ihre [neue Frage] (https://stackoverflow.com/questions/45896645) ist darüber, siehe meine Bearbeitung: Aktivieren Sie 'strictNullChecks'. – jcalz