给定以下对象:
const parameters = {
someNumberMember: 1 as number,
someArrowFunctionMember: () => { return true; }
}
有没有一种方法可以直接将类型定义分配给someArrowFunctionMember
?我的意思是";完整的";函数的类型定义,而不是定义参数和返回类型。这样的东西:
...
someArrowFunctionMember: () => { return true; } as DesiredType,
... ^^^^^^^^^^^^^^^ doesn't work
上下文:我知道有两种更好的方法。
- 为
parameters
分配一个类型,该类型定义someArrowFunctionMember
的类型,如下所示:
type ParametersType = {
someNumberMember: number;
someArrowFunctionMember: () => boolean;
}
const parameters: ParametersType = {
someNumberMember: 1 as number,
someArrowFunctionMember: () => { return true },
}
- 将箭头函数提取到如下变量中:
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会隐式地推断类型,所以通常您不需要强制转换。