ES6 verwenden Map
wenn eine Karte wirklich beliebige Werte festen Typs annehmen kann, und ansonsten optionale Eigenschaften
Ich denke, das ist die Richtschnur, an die ich mich halten werde. ES6 Karte kann in Typescript wie erwähnt getan werden: ES6 Karte in Typescript
Der Hauptanwendungsfall für optionale Eigenschaften sind "Options"-Parameter von Funktionen: Verwendung benannter Parameter JavaScript (auf der Grundlage von Typescript) In diesem Fall kennen wir im Voraus die genaue Liste der erlaubten Eigenschaften, also ist es am vernünftigsten, einfach eine explizite Schnittstelle zu definieren und alles, was optional ist, mit ?
wie erwähnt bei: https://stackoverflow.com/a/18444150/895245 um so viel Typüberprüfung wie möglich zu erhalten:
const assert = require('assert')
interface myfuncOpts {
myInt: number,
myString?: string,
}
function myfunc({
myInt,
myString,
}: myfuncOpts) {
return `${myInt} ${myString}`
}
const opts: myfuncOpts = { myInt: 1 }
if (process.argv.length > 2) {
opts.myString = 'abc'
}
assert.strictEqual(
myfunc(opts),
'1 abc'
)
Und dann verwende ich Map, wenn es sich um etwas wirklich Beliebiges (unendlich viele mögliche Schlüssel) und einen festen Typ handelt, z. B.:
const assert = require('assert')
const integerNames = new Map<number, string>([[1, 'one']])
integerNames.set(2, 'two')
assert.strictEqual(integerNames.get(1), 'one')
assert.strictEqual(integerNames.get(2), 'two')
Getestet am:
"dependencies": {
"@types/node": "^16.11.13",
"typescript": "^4.5.4"
}