如何在TypeScript中声明函数的返回类型

ia2d9nvy  于 2022-12-24  发布在  TypeScript
关注(0)|答案(8)|浏览(190)

我在这里检查了https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md,这是TypeScript Language Specifications,但我找不到如何声明函数的返回类型。
我在下面的代码中展示了我所期望的内容:第一个月

class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }
  greet(): string {
    return "Hello, " + this.greeting;
  }
}

我知道我可以使用(name:string) => any,但这主要用于传递回调函数:

function vote(candidate: string, callback: (result: string) => any) {
  // ...
}
rnmwe5a2

rnmwe5a21#

三硝基甲苯;

getUserRole(name: string) {
   const roles: Role[] = [{ name: 'admin' }, { name: 'admin' }]
   return roles.find(role => role.name === name) || null;
}

let userRole: ReturnType<typeof getUserRole>; // as type of Role | null
4ktjp1zp

4ktjp1zp2#

function getTime(): number {
  return new Date().getTime();
}

这是一个简单的例子,你可以用任何类型来代替数字,或者你甚至可以在联合类型的帮助下为输入和输出使用多个类型,例如:

function testfunction(value:string | number):string | number{

return value;
  }

输入值可以是字符串或数字。
输出值可以是字符串或数字。

vjhs03f7

vjhs03f73#

函数表达式返回类型的示例为:

const testFunction = (value:string|number):string | number =>{
    return value;
}

泛型类型函数表达式

const foo = <T>(x: T):T => x;
kupeojn6

kupeojn64#

你是对的--这里是一个完整的例子--你会看到var result隐式地是一个字符串,因为返回类型是在greet()函数中指定的,如果将类型更改为number,你会得到警告。

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() : string {
        return "Hello, " + this.greeting;
    }
} 

var greeter = new Greeter("Hi");
var result = greeter.greet();

下面是一个数字示例--如果你尝试这样做,你会在playground编辑器中看到红色的波浪线:

greet() : number {
    return "Hello, " + this.greeting;
}
kq0g1dla

kq0g1dla5#

使用箭头符号的返回类型与前面的答案相同:

const sum = (a: number, b: number) : number => a + b;
zdwk9cvp

zdwk9cvp6#

functionName() : ReturnType { ... }
oxosxuxt

oxosxuxt7#

您可以在www.example.com和3.5.5节中阅读更多关于language specification中函数类型的信息3.5.3.5。
TypeScript编译器将在可能的情况下推断类型,这样您就不需要指定显式类型。因此对于greeter示例,greet()返回一个字符串常量,它告诉编译器函数的类型是一个字符串,不需要指定类型。例如,在这个示例中,我有一个greeter类,它带有一个返回字符串的greet方法,和一个赋给数字文字的变量。编译器将推断这两种类型,如果你试图将字符串赋给数字,你将得到一个错误。

class Greeter {
    greet() {
        return "Hello, ";  // type infered to be string
    }
} 

var x = 0; // type infered to be number

// now if you try to do this, you will get an error for incompatable types
x = new Greeter().greet();

类似地,这个示例将导致错误,因为编译器在给定信息的情况下无法确定类型,这将是一个必须具有显式返回类型的地方。

function foo(){
    if (true)
        return "string"; 
    else 
        return 0;
}

然而,这是可行的:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
csbfibhn

csbfibhn8#

用于多个函数的外部返回类型声明:

type ValidationReturnType = string | boolean;

function isEqual(number1: number, number2: number): ValidationReturnType {
    return number1 == number2 ? true : 'Numbers are not equal.';
}

相关问题