如何将对象属性定义为函数 = 正确的语法?

Posted

技术标签:

【中文标题】如何将对象属性定义为函数 = 正确的语法?【英文标题】:How to define Object Property as Function = Correct Syntax? 【发布时间】:2020-02-11 21:50:19 【问题描述】:

有人可以指出规范的确切位置以了解testMessage: (): string => 行的语法。语法不应该类似于testMessage: () => string;吗?为什么它们不同?

export default 
  Query: 
    testMessage: (): string => 
      return 'Hello World!';
    
  
;

【问题讨论】:

typescriptlang.org/docs/handbook/functions.html 该页面上的第一个类型示例说明了内联返回类型的使用,请说明您不明白的地方。 【参考方案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 =>  /* ... */ ;

类定义说明了这可能令人困惑的地方:: 指的是类型信息,= 将设置一个初始值。也就是说,同样的逻辑适用:使用=> 描述类型表达式中的返回类型,使用: 使用返回类型注释内联函数定义(可能使用=> 语法本身)。

【讨论】:

以上是关于如何将对象属性定义为函数 = 正确的语法?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Python 2 unicode() 函数转换为正确的 Python 3.x 语法

若想设置cookie的path属性对本站点

如何在我的 setState 函数调用中使用变量?

Python语法速查: 7. 函数基础

2017 5 31 php面向过程 面向对象1

如何在 JavaScript 中“正确”创建自定义对象?