在 Typescript 中将函数类型应用于对象的箭头函数成员?



给定以下对象:

const parameters = {
someNumberMember: 1 as number,
someArrowFunctionMember: () => { return true; }
}

有没有一种方法可以直接将类型定义分配给someArrowFunctionMember?我的意思是";完整的";函数的类型定义,而不是定义参数和返回类型。这样的东西:

...
someArrowFunctionMember: () => { return true; } as DesiredType,
...                                               ^^^^^^^^^^^^^^^ doesn't work

上下文:我知道有两种更好的方法。

  1. parameters分配一个类型,该类型定义someArrowFunctionMember的类型,如下所示:
type ParametersType = {
someNumberMember: number;
someArrowFunctionMember: () => boolean;
}
const parameters: ParametersType = {
someNumberMember: 1 as number,
someArrowFunctionMember: () => { return true },
}
  1. 将箭头函数提取到如下变量中:
const handler: () => boolean = () => { return true };
const parameters = {
someNumberMember: 1 as number,
someArrowFunctionMember: handler,
}

我只是好奇是否有一种语法可以让我直接这么做。

我尝试使用as关键字,因为它在使用经典函数时有效:

const parameters = {
someNumberMember: 1 as number,
someArrowFunctionMember: function() {return true;} as () => boolean,
}                                                    ^^^^^^^^^^^^^^^^^ works like a charm

我还尝试使用带尖括号的类型转换,因为它也适用于经典函数:

const parameters = {
someNumberMember: <number> 1,
someArrowFunctionMember: <Function> function() {return true;},
}

注意:这最初并不起作用,直到我意识到问题不是Typescript本身,而是将TS与JSX结合使用,这是有道理的。在tsconfig中禁用jsx后,它可以工作(至少在TS操场上(。

我找到了这个答案,但它似乎已经不起作用了,或者我的tsconfig中有什么东西阻止了它的工作。

你试过把整个函数放在括号里吗:

...
someArrowFunctionMember: (() => { return true; }) as DesiredType,
... 

注意:

Typescript会隐式地推断类型,所以通常您不需要强制转换。

最新更新