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



Я проверил здесь https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md который является Спецификации Языка Машинописи но я не мог видеть одну вещь, как я могу объявить возвращаемый тип функции. Я показал, что я ожидал в коде ниже: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) {
// ...
}
473   3  

3 ответов:

вы правы - вот полностью рабочий пример - вы увидите, что var result неявно является строкой, поскольку тип возвращаемого значения указан на . Измените тип на 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;
}

вы можете узнать больше о типах функций в спецификация языка в разделах 3.5.3.5 и 3.5.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;
}
functionName() : ReturnType { ... }

Comments

    Ничего не найдено.