В Teamecript, как я заявляю на массив функций, которые принимают строку и вернуть строку?

StackOverflow https://stackoverflow.com//questions/12706161

  •  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)[]
.

Дальше обновление Это в 1.4!

Другие советы

Основываясь на ваших исследованиях, я написал маленький класс 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();
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top