跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • TypeScript 中,如何定义(声明)函数的类型?
未分類
5 2 月 2021

TypeScript 中,如何定义(声明)函数的类型?

TypeScript 中,如何定义(声明)函数的类型?

資深大佬 : Kasumi20 1

我知道可以把函数写成变量,就可以声明函数的类型了,比如这里的 Root 组件:

import * as React from 'react';  var Root: React.FC = (props: React.PropsWithChildren<{}>) => {     return (         <div>             {props.children}         </div>     ) }  export default () => (     < >         <Root>             <div>Hello</div>         </Root>     </> ) 

但是太丑了,该怎么写呢?

function Root(props) { } 

大佬有話說 (21)

  • 資深大佬 : Yadomin

    `function Root(props): React.FC {}`

  • 主 資深大佬 : Kasumi20

    @Yadomin 大哥,你这是定义返回类型

  • 資深大佬 : Yadomin

    也可以写成
    const Root = (props): React.FC => {}

  • 資深大佬 : meepo3927

    函数有类型吗

  • 資深大佬 : knives

    是指 props 的类型定义?可参考: https://juejin.cn/post/6884144754993397767

  • 主 資深大佬 : Kasumi20

    @meepo3927 这句话问得很哲学,我喜欢

  • 資深大佬 : Justin13

    interface 里的 function types 可以做到

  • 資深大佬 : BBUG

    不行

    明确一点,`var Root: React.FC = () => {}` 等号右边的函数声明隐式包含一个类型,左边变量类型相当于是对右边函数类型的一个约束

    一般推荐使用常规函数声明组件即可,不需要使用 React.FC
    https://github.com/typescript-cheatsheets/react/blob/main/README.md#function-components

  • 資深大佬 : iamppz

    “`
    const func: () => void = function () {
    …
    };
    “`

    是这个意思?

  • 資深大佬 : hupo0

    “` typescript
    interface Root {
    (props: React.PropsWithChildren<{}>): React.FC;
    }
    “`

  • 資深大佬 : learningman

    函数的类型不就是函数,你想说的是返回值?

  • 資深大佬 : Reapper

    函数就是类型,除非你说返回值类型

  • 資深大佬 : yazoox

    这个 Root 的类型,就是 React.FC, 返回值是 React.Element<any, any> | null

  • 資深大佬 : lanten

    其实函数类型的定义就是行参和返回值类型定义,可以直接用 typeof 推断。

    “`ts
    function foo(strArr: string[]): string {
    return strArr.join(‘,’)
    }

    type Foo = typeof foo

    “`

    也可以用 interface 定义函数类型’

    “`ts
    interface F {
    (strArr: string[]): string
    }

    const fn: F = strArr => {
    return strArr.join(‘,’)
    }
    “`

  • 資深大佬 : 1a0ma0

    interface 不是可以定义嘛?

  • 資深大佬 : siweipancc

    ……,你先回答我官网文档你看完了吗 😀

  • 主 資深大佬 : Kasumi20

    @siweipancc 你先回答我你看完我问题了吗?

  • 資深大佬 : ljpCN

    14 正解。
    “`typescript
    function fn(arg: string): string {
    return arg;
    }
    “`

  • 資深大佬 : palmers

    我知道的可以使用函数声明( Function Declaration )和函数表达式( Function Expression )
    具体可以参考这个: https://www.typescriptlang.org/docs/handbook/interfaces.html#function-types

  • 資深大佬 : coffeedeveloper

    上认为能申明的都是没了解实际问题的,这个问题我也困扰过。目前确实是无解的。

    比如我想申明一个函数的类型申明,有 x 、y 两个 number 参数,返回一个 number 。可以用 interface

    “`typescript
    interface NumFn {
    (x: number, b: number): number
    }
    “`

    随后希望 `function Foo` 和`function Bar`都能够基于 NumFn 这个 interface 约定来实现的话,目前确实是没法弄的,只能通过 `const foo = `来勉强达到目的。

  • 資深大佬 : Sparetire

    怎么这么多连问题都没看懂就强答的。。还函数有类型吗都问出来了
    主是希望在定义函数的同时也声明函数的类型吧,注意是定义函数不是函数表达式(js 里面似乎是这么个叫法吧,有点忘了)
    显然主是知道函数表达式的时候该如何指定函数类型。。还一堆人搁这接口 typeof 的。。
    回到问题,目前 ts 没法做

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具