Машинопись неправильно выводит параметры покоя - PullRequest
0 голосов
/ 18 сентября 2018

Есть функция bar типа Bar.Модифицированная версия функции (barStochastic) должна сбрасывать псевдослучайный генератор перед вызовом bar, но, кроме этого, она идентична.

Поскольку Bar имеет много аргументов,Я хочу передать их, используя ...args распространенный синтаксис.

const random = {
    initState() {
        return 1;
    },
};
type Bar = (a: number, b: number, c: number) => number;
const barDeterministic: Bar = (a, b, c) => {
    return a + b + c;
};
const barStochastic: Bar = (...args) => {
    random.initState();
    return barDeterministic(...args);
};

Мой редактор не жалуется на это (обычно это согласуется с компилятором TS), но компиляция завершается неудачей.

error TS7019: Rest parameter 'args' implicitly has an 'any[]' type.

10     const barStochastic: Bar = (...args) => {
                                   ~~~~~~~


error TS2556: Expected 3 arguments, but got 0 or more.

12         return barDeterministic(...args);
                  ~~~~~~~~~~~~~~~~~~~~~~~~~

Я бы ожидал, что ...args будет выведено как [number, number, number].Это решит обе ошибки.

Это ошибка или предполагаемое поведение?


Настройка:

Deepin 15.7 Desktop
Node v10.9.0
tsc 2.9.2
vscode 1.27.1

tsconfig.json:

{
  "include": [
    "./src/**/*"
  ],
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": [
      "es2015"
    ],
    "allowJs": true,
    "sourceMap": true,
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "moduleResolution": "node",
    "baseUrl": "./src",
  }
}

1 Ответ

0 голосов
/ 18 сентября 2018

Вы используете Typescript 2.9.Функцией, которую вы пытаетесь использовать, является кортежи в параметрах отдыха и выражениях распределения , которые были реализованы в 3.0.

Вы можете попробовать свой пример на детской площадке , и он будетработать как положено.

Поскольку ваш редактор не жалуется, я предполагаю, что ваш редактор использует 3.0 (VS Code 1.27.1 поставляется с языковой службой 3.0), но вы компилируете, используя 2.9.

...