TypeScript Object als Parameter mit Typendefinition

Hendoul

Commander
Registriert
Apr. 2008
Beiträge
2.049
Hi :)

Javascript:
function blub(myObj) {
    
}

blub({xy: '1', ab: '0'});

Wie kann ich eine Typendefinition für myObj erstellen, dass man nur ein Object übergeben darf, und das Object darf aber als key irgendwas verwenden, nur value muss zwingend ein String sein.

Ich komme nicht weiter als
myObj: {???, value: string}
 
type Foo = Record<any, string>
type Foo = { [key: string]: string }
 
Zuletzt bearbeitet:
Dafür wurden Interfaces geschaffen.
 
  • Gefällt mir
Reaktionen: _RM_
Interfaces waren auch mein spontaner Gedanke dafür

Code:
export interface foo {
    key: any,
    value: string
}

Je nachdem wo es verwendet wird, kannst dir export sparen.
 
  • Gefällt mir
Reaktionen: Hayda Ministral
@_RM_
dein Interface würde nicht funktionieren, da TE ja kein fixen Property-Name haben will.
 
Zuletzt bearbeitet:
Ist zwar schon ein paar Tage her, aber interessiert mich trotzdem:

Auch wenn es aus der Fragenformulierung nicht ganz hervorgeht, aber ich verstehe das so, dass er die Function typisiert haben will inkl. Parameter. Also eher in diese Richtung:
Code:
//Objecttype
interface MyObj {
    [index:string]:string
}

//FunctionType
interface FunctionBlub {
    (arg:MyObj):void
}

//declare function
const functionBlub:FunctionBlub = (myObj) => {
    //do something with myObj
}

let blub = {x:"1",y:"2"}

functionBlub(blub)

Unknown ist nicht für diesen Einsatz gedacht und Overloads sind ok, wenn man sie richtig einsetzt. Any sollte man nur mit bedacht einsetzen ^^
Ergänzung ()

Hier auch eine Möglichkeit ohne direktes Interface, nur mit Typisierung:

Code:
let blub = {x:"1",y:"2"}

const functionBlub2: (arg: { [index: string]: string }) => void = (
    myObj
) => {
    //do something with Obj
}

functionBlub2(blub)
 
Zuletzt bearbeitet:
KitKat::new() schrieb:
Magst du das vielleicht erläutern?

Ich kanns versuchen :)

In diesem speziellen Falle hat @Hendoul zwar die Anforderung, dass der Key (also der Index) "irgendwas" sein darf, dieser ist aber bei simplen Objecten ein string oder number. Die Signatur kann in diesem Fall nicht vom Typ unknown sein. Auch kann sie nicht any sein.

Da der Value vom Typ string sein soll, ist es auch hier nicht zweckmäßig.

Der Typ unknown würde bei uns nur eingesetzt werden, wenn wir überhaupt gar keine Informationen über den Typ von Daten haben haben, die auf die API trifft. Also eher externer Input.
 
Zurück
Oben