Как объявить возвращаемые типы для функций в машинописном

голоса
68

Я проверил здесь http://go.microsoft.com/fwlink/?LinkId=267238 который является спецификацией машинописи языка , но я не мог видеть одно , что как я могу объявить тип возвращаемого значения функции. Я показал , что я ожидал , что в коде ниже:greet(name:string) :string {}

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) {
// ...
}
Задан 04/10/2012 в 22:28
источник пользователем
На других языках...                            


4 ответов

голоса
61

Вы правильно - вот полностью рабочий пример - вы увидите , что 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();

Вот пример номер - вы увидите красные загогулины в редакторе игровых площадок, если вы попытаетесь это сделать:

greet() : number {
    return "Hello, " + this.greeting;
}
Ответил 04/10/2012 в 22:32
источник пользователем

голоса
14

Вы можете прочитать больше о типах функций в спецификации языка в разделах 3.5.3.5 и 3.5.5.

Машинописи компилятор выводить типы, когда он может, и это будет сделано, вы не должны указать явные типы. поэтому для примера Greeter, здороваюсь () возвращает строку, буквальную, который сообщает компилятор, что тип функции является строкой, и нет необходимости указывать тип. так, например, в данном примере, у меня есть класс Greeter с методом Приветствуйте, который возвращает строку, и переменную, которая присваивается номер буквальным. компилятор будет выводить оба типа, и вы получите сообщение об ошибке, если вы попытаетесь присвоить строку в число.

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;
}
Ответил 04/10/2012 в 23:43
источник пользователем

голоса
2
functionName() : ReturnType { ... }
Ответил 01/01/2018 в 16:43
источник пользователем

голоса
0

Возврат типов, используя стрелки обозначения те же, как и предыдущие ответы:

const sum = (a: number, b: number) : number => a + b;
Ответил 04/11/2018 в 20:45
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more