Как объявлять типы возвращаемых значений для функций в 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) {
// ...
}
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; }
Comments