Vue中的类型检查需要将构造函数作为类型传递:
props: {
coords: {
type: Coordinates,
required: true,
},
},
我无法找到如何找到Coordinates
构造函数。无法使用Object
,因为它不会从任何内容继承,并且不希望只允许任何内容。
MDN上没有关于如何直接访问它的信息:https://developer.mozilla.org/en-US/docs/Web/API/Coordinates
有什么想法吗?
编辑:澄清一下,window.Coordinates
未定义。上面的代码示例不起作用。
答案 0 :(得分:2)
Coordinates
不在浏览器中公开以供Web开发人员使用的内容。它是由W3C地理规范定义的接口,用于实现地理定位功能的浏览器供应商。接口描述了某种类型的数据结构的外观。例如,以下示例中为coords
:
navigator.geolocation.getCurrentPosition(function (pos) {
var coords = pos.coords
console.log(coords)
})
即使您可以使用以下代码检索Coordinates
的文字。它只是一个对象(是的,它是原型,而不是构造函数),你几乎无能为力。
Object.getPrototypeOf(pos.coords)
这里有两点:
Coordinates
不适合网络开发者。Coordinates
甚至不是一个功能。我猜的唯一方法是define your own validator并检查输入值是否符合您的要求。这会更容易,因为Coordinates
有一个特殊的toString()
符号:
props: {
coords: {
validator: function (value) {
return value.toString() === '[object Coordinates]'
}
}
}
但是,如果您手工制作自己的coords数据,此验证器可能会失败。更通用的方法就像鸭子打字一样,只需检查它是否具有您需要的适当属性,通常是latitude
和longitude
。
答案 1 :(得分:0)
您需要使用自定义验证器检查值是否为构造函数的值:
coords {
validator: function (value) {
return value instanceOf Coordinates; // Coordinates is a constructor in your case
}
}
查看HTML5 Geolocation文档。
答案 2 :(得分:0)
我也在处理这个问题。我的解决方案是定义一个假的构造函数:
function Coordinates () {}
Coordinates.prototype = Object.prototype
在vue组件中
props: {
coords: {
type: Coordinates
}
}
这将起作用,因为Vue使用instanceof
来验证自定义类型。