Mit dem folgenden Code;TypeScript Duck Typisierung: Erfordert nur eine Eigenschaft
interface ParamTest extends Object {
ids?: any;
model?: any;
params?: any;
pageContext?: PageContext;
}
class Foo {
public callMeWithParamsPlease(params: ParamTest): void{
}
public nope() {
this.callMeWithParamsPlease("hi");
}
}
Ich weiß nicht, was ich als Parameter geliefert werden. Aber ich weiß, dass mindestens eine der Felder ausgefüllt werden muss. Wenn ich benutze:
export interface ApiServiceOpts extends Object {
ids?: any;
model?: any;
params?: any;
pageContext: PageContext;
}
Dann ist es nicht mehr kompatibel mit Schnur, wie zu erwarten - weil String nicht pageContext
hat. Ich weiß jedoch nicht genau, ob der pageContext geliefert wird - aber ich weiß, dass mindestens eines der Felder geliefert werden muss. Gibt es eine magische Schreibmaschinensyntax, die dies erlaubt?
Vielleicht etwas wie;
interface PageContext {}
export interface ParamTestId {
ids: any;
}
export interface ParamTestModel {
model: any;
}
export interface ParamTestParams {
params: any;
}
export interface ParamTestPageContext {
pageContext: PageContext;
}
class Foo {
public callMeWithParamsPlease(params: ParamTestId & ParamTestModel & ParamTestParams & ParamTestPageContext): void {
params.ids.a = "";
params.model.b = {}
}
public nope() {
this.callMeWithParamsPlease("hi")
}
}
Es ist nicht klar, was Sie fragen. '" es ist nicht länger kompatibel mit string "' - wann war es jemals mit einer string kompatibel, was ist das "es"? Nein, wo in Ihrem Code haben Sie einen String-Parameter. Warum würden Sie auch "Objekt" erweitern? –