有人可以指出规范的确切位置以了解第testMessage: (): string => {
行的语法吗?语法不应该像testMessage: () => string;
一样吗?他们为什么不同?
export default {
Query: {
testMessage: (): string => {
return 'Hello World!';
}
}
};
答案 0 :(得分:1)
这有点令人困惑,因为您的:
在同一行中具有两个不同的功能:第一个是JavaScript的字典分配,第二个是来自TypeScript的类型信息。
let someMessageWithoutReturnType = () => { return 'Hello World!'; }
// ^-- lambda function -----------^
let someMessage = (): string => { return 'Hello World!'; }
// ^-type-^
// ^-- lambda function -------------------^
在上述每种方法中,变量没有类型信息。相反,lambda函数具有可选的类型信息(显式返回类型),例如standard function syntax in this example in the Functions page of the handbook:
function add(x: number, y: number): number { return x + y; } let myAdd = function(x: number, y: number): number { return x + y; };
如果您在字典中进行分配,则此行为仍然相同,但是第一个:
在分配中代替了=
,而第二个:
将返回类型信息提供给函数表达式。这里的含义很明确,因为您不能使用冒号在字典中明确键入键someMessage
;您需要显式强制转换。
let someMessageDict = {
someMessage: (): string => { return 'Hello World!'; }
// ^-- lambda function -------------------^
};
相反,您提到的语法用于键入变量,如"Writing the function type"部分中所述。请注意,这一次,变量是显式键入的,但未设置为任何值。没有实现。
let testMessage: () => string;
class SomeClass {
testMessage: () => string; // defines an unset field
testMessage2: () => string = SOME_FUNCTION_DECLARED_ELSEWHERE;
testMessage3: () => string = (): string => { /* ... */ };
}
类定义说明了在哪里可能造成混淆::
引用类型信息,而=
将设置初始值。也就是说,同样的逻辑也适用:使用=>
来描述类型表达式中的返回类型,并使用:
来对内联函数定义(其本身可能使用=>
语法进行注释)。返回类型。