相关疑难解决方法(0)

Typescript,从接口中提取多个调用签名

鉴于以下情况:

interface Foo {
  attr: string;
  (a: string): number;
  (a: number): number;
}
Run Code Online (Sandbox Code Playgroud)

如何创建一种仅选择函数重载的类型,这意味着:

interface Bar {
  (a: string): number;
  (a: number): number;
}
Run Code Online (Sandbox Code Playgroud)

当只有一个呼叫签名时,我找到了解决方案,我的情况是当有多个呼叫签名时。

谢谢

typescript

4
推荐指数
1
解决办法
679
查看次数

打字稿:重载函数的ReturnType

给出的类型ReturnType似乎取决于重载签名的写入顺序

function applyChanges1(input: string): number
function applyChanges1(input: number): string
function applyChanges1(input: number | string): number | string {
  return typeof input === "number" ? input.toString() : input.length
}

function applyChanges2(input: number): string
function applyChanges2(input: string): number
function applyChanges2(input: number | string): number | string {
  return typeof input === "number" ? input.toString() : input.length
}

type Ret1 = ReturnType<typeof applyChanges1> // string
type Ret2 = ReturnType<typeof applyChanges2> // number
Run Code Online (Sandbox Code Playgroud)

似乎采用了最后一个重载签名的返回类型,这似乎很随意。我期待Ret1Ret2都会string | number。有这种行为的原因吗?

typescript

3
推荐指数
3
解决办法
511
查看次数

打字稿:定义为元组的传播函数参数

我有一个 Typescript 项目,我在Date函数内部调用。我想使用与从中Date重载的构造函数相同的函数参数:

interface DateConstructor {
    new(): Date;
    new(value: number | string | Date): Date;
    new(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想使用扩展运算符将参数传递给Date. 所以我的函数应该是这样的:

function myFn(...args: DateComponents): Date {
    return new Date(...args)
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我实际上并没有返回日期,但这仅用于测试...

现在的问题是如何定义DateComponents. 我成功地分别实现了 3 个重载签名DateConstructor

// Case A: No argument provided
interface A {
  (): Date;
}
const a: A = function (...args: []): Date { …
Run Code Online (Sandbox Code Playgroud)

typescript

2
推荐指数
1
解决办法
2076
查看次数

标签 统计

typescript ×3