В Teamecript, как я заявляю на массив функций, которые принимают строку и вернуть строку?
-
13-12-2019 - |
Вопрос
<Сильное> Обновление - Контекст этого вопроса был предварительно напечатанный 1.4.Поскольку эта версия, моя первая предположение была поддержана языком.Смотрите обновление до ответа.
Я могу объявить f
функцией, которая принимает строку и возвращает строку:
var f : (string) => string
.
И я могу объявить g
, чтобы быть массивом строки:
var g : string[]
.
Как я могу объявить h
, чтобы быть массивом «функции, которая принимает строку и возвращает строку»?
Мое первое предположение:
var h : ((string) => string)[]
.
Это кажется синтаксической ошибкой.Если я заберу дополнительные скобки, то это функция из строки до массива строки.
Решение
Я подумал это.Проблема в том, что генеракодицетагCode для литерала типа функции является просто синтаксическим сахаром и не хочет составить с =>
.
как спецификация говорит:
Тип функции Литерал формы
(Параметр)=> returntype
точно эквивалентно литералу типа объекта
{(patamlist): returntype}
Так что я хочу:
var h : { (s: string): string; }[]
.
полный пример:
var f : (string) => string
f = x => '(' + x + ')';
var h : { (s: string): string; }[]
h = [];
h.push(f);
.
<Сильное> Обновление :
Судя по адресу Это изменение скобки будут разрешены в объявлениях типа в 1.4, поэтому «первое предположение» вВопрос также будет правильным:
var h: ((string) => string)[]
.
Другие советы
Основываясь на ваших исследованиях, я написал маленький класс PlanetreeTer / Sayhello: `
/* PlanetGreeter */
class PlanetGreeter {
hello : { () : void; } [] = [];
planet_1 : string = "World";
planet_2 : string = "Mars";
planet_3 : string = "Venus";
planet_4 : string = "Uranus";
planet_5 : string = "Pluto";
constructor() {
this.hello.push( () => { this.greet(this.planet_1); } );
this.hello.push( () => { this.greet(this.planet_2); } );
this.hello.push( () => { this.greet(this.planet_3); } );
this.hello.push( () => { this.greet(this.planet_4); } );
this.hello.push( () => { this.greet(this.planet_5); } );
}
greet(a: string): void { alert("Hello " + a); }
greetRandomPlanet():void {
this.hello [ Math.floor( 5 * Math.random() ) ] ();
}
}
new PlanetGreeter().greetRandomPlanet();
.