Nih*_*hau 10 javascript flowtype immutable.js
给定一个像这样创建的网站对象
import {Map} from 'immutable'
const website = new Map({name: 'My Website', url: 'http://www.myw.fr'})
Run Code Online (Sandbox Code Playgroud)
我怎么能声明一个websiteType,它将是一个包含完全给定属性的地图.我知道我能做到:
declare type websiteType = Map<string,string>
Run Code Online (Sandbox Code Playgroud)
但我想更具体一点,并声明一个必须包含属性name和url类型的地图string.
它甚至可能吗?
希望我的问题是正确的,因为我从未使用过“immutable”中的地图,因此我将使用es6 地图。
你为什么不直接使用一个类呢?
class Website extends Map<string, string> {
constructor(name: string, url: string) {
super()
this.set("name", name)
this.set("url", url)
}
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以像这样初始化它:
const website = new Website("awesome", "www.awesome.com")
Run Code Online (Sandbox Code Playgroud)
然后执行get和set操作。
如果错过参数 flowtype 将抛出错误。
我希望这能成为您的解决方案。
编辑:
您也可以创建一个初始化地图的函数。
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
}
Run Code Online (Sandbox Code Playgroud)
不过,我发现第一个解决方案更好,因为它为您提供了网站类型,并且您不必创建创建者功能。
编辑:
如果您想要与使用地图初始化相同的语法,您也可以这样做:
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])
}
}
}
Run Code Online (Sandbox Code Playgroud)
不过我认为第一个有意义。
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |