Mam nadzieję, że dostałem twoje pytanie, ponieważ nigdy nie użyłem mapy z "niezmiennej", dlatego użyję es6 Map.
Dlaczego po prostu nie skorzystasz z lekcji?
class Website extends Map<string, string> {
constructor(name: string, url: string) {
super()
this.set("name", name)
this.set("url", url)
}
}
ten sposób można zainicjować to tak:
const website = new Website("awesome", "www.awesome.com")
a następnie wykonać operacje get i set.
W przypadku pominięcia parametrów typ przepływu spowoduje błąd.
Mam nadzieję, że to rozwiązanie dla Ciebie.
EDIT:
Można też po prostu stworzyć funkcję, która inicjuje swoją mapę.
declare type WebsiteType = Map<string, string>
function createWebsite(name: string, description: string) {
const website: WebsiteType = new Map
website.set("name", name)
website.set("description", description)
return website
}
Jednak uważam, że pierwsze rozwiązanie ładniejszy ponieważ daje typ witryny i nie trzeba, aby utworzyć funkcję twórcy.
EDIT:
Jeśli chcesz taką samą składnię jak dawniej inicjalizacji mapy, można również zrobić:
class Website extends Map<string, string> {
constructor({name, url, ...rest}) {
super()
this.set("name", name)
this.set("url", url)
for(const name in rest) {
this.set(name, rest[name])
}
}
}
Jednak myślę, że pierwszy z nich sens.
Hej, właściwie szukam podobnej odpowiedzi. Znalazłeś coś? –
Witaj Nie znalazłem sposobu, aby to zrobić z typem flow. Jednak w immutablejs istnieje typ rekordu, który pozwala osiągnąć ten sam cel, deklarując ograniczoną mapę z wartościami domyślnymi. Cf: https://facebook.github.io/immutable-js/docs/#/Record – Nihau