如何在对象方法上使用TypeScript接口重载
我试图有条件地返回KML或GeoJSON(分别是字符串和对象类型),我想知道如何通过对象方法上的接口分配这样的函数 假设对象是如何在对象方法上使用TypeScript接口重载,typescript,Typescript,我试图有条件地返回KML或GeoJSON(分别是字符串和对象类型),我想知道如何通过对象方法上的接口分配这样的函数 假设对象是 const api = { getGeometry(url, format) { return fetch(`${url}?format=${format}`) } } 有这样一个界面: interface GeometryRequest { (url: string, format: 'kml'): Promise<string>
const api = {
getGeometry(url, format) {
return fetch(`${url}?format=${format}`)
}
}
有这样一个界面:
interface GeometryRequest {
(url: string, format: 'kml'): Promise<string>
(url: string, format: 'geojson'): Promise<GeoJSON.FeatureCollection<any>>
}
我只是想知道如何以类似的方式将类型分配给对象方法。
以下是我尝试过的几种方法:
getGeometry
getGeometry:GeometryRequest
两者都不是正确的语法
我还在上添加了同一问题的更简单版本。在操场中,output
的类型是:const-output:string | number
。但它应该能够以某种方式从接口中的重载函数中区分类型
如果您对这个语法问题有任何帮助,我们将不胜感激!:) 函数表达式不能指定多个重载。我们可以通过以下几种方式之一模拟效果 使用类型断言指定函数的公共签名
const a = {
b: function(c) {
if (typeof (c) === 'string') {
return parseInt(c)
}
return String(c)
} as {
(a: string): number
(a: number): string
}
}
const a = {
b: (function () {
function b(a: string): number
function b(a: number): string
function b(c) {
if (typeof (c) === 'string') {
return parseInt(c)
}
return String(c)
}
return b;
})()
}
使用条件类型根据输入类型决定返回类型,尽管这会在返回值时导致实现问题(comp不允许您分配值,因为它无法确定该值是否安全)
你确定游乐场链接是正确的吗?我也不清楚你想要完成什么。你能发布一个有什么特别不起作用的snipet吗?天哪,我抓错了URL,把它弄丢了@TitianCernicova dragomirfix@TitianCernicova Dragomir谢谢:)您的第一个选择是非常可取的。在我的TS游乐场链接中,我只是将
作为Test
添加到函数的末尾(也将其重新定义为b:function(c){
。谢谢!
const a = {
b<T extends string|number>(c : T ):T extends string ?number: string {
if (typeof (c) === 'string') {
return parseInt(c) as any
}
return String(c) as any
}
}
const a = {
b: (function () {
function b(a: string): number
function b(a: number): string
function b(c) {
if (typeof (c) === 'string') {
return parseInt(c)
}
return String(c)
}
return b;
})()
}