2017-01-06 6 views
0

я продолжаю получать эту ошибку с типами расходомеров и шутя:jest не понимает типы потоков и разрушение объектов?

TypeError: Cannot read property 'returnType' of undefined 

    at builder (src/index.js:22:195) 
    at Object.<anonymous> (__test__/index.spec.js:6:53) 
    at process._tickCallback (internal/process/next_tick.js:103:7) 

Ниже вся моя установка для этого:

код приложения:

// @flow 
type BuilderReturnType = { 
    path: string, 
    query: string 
} 

type BuilderOptionsType = { 
    returnType?: string 
} 

export default function builder(path: string, {returnType = 'object'}: BuilderOptionsType): BuilderReturnType { 
    const query = {}; 
    let queryResult = null; 
    if (returnType === 'string') { 
     queryResult = doSomething(query); 
    } 
    return { 
     path, 
     query: queryResult !== null ? queryResult : query 
    } 
} 

.babelrc конфигурации:

{ 
    "presets": [ 
     "es2015", "jest" 
    ], 
    "plugins": [ 
     "transform-object-rest-spread", 
     "transform-flow-strip-types" 
    ], 
    "env": { 
     "test": { 
      "presets": [ 
       "es2015", "jest" 
      ], 
      "plugins": [ 
       "transform-object-rest-spread", 
       "transform-flow-strip-types" 
      ] 
     } 
    } 
} 

jest.json конфигурации:

{ 
    "bail": true, 
    "verbose": true, 
    "collectCoverage": true, 
    "coverageDirectory": "./coverage", 
    "coverageThreshold": { 
    "global": { 
     "branches": 100, 
     "functions": 100, 
     "lines": 100, 
     "statements": 100 
    } 
    }, 
    "transform": { 
    "^.+\\.js$": "<rootDir>/node_modules/babel-jest" 
    } 
} 

Кажется, что есть проблемы с сигнатурой методы с использованием деструктурирующих и потоком типов одновременно (BuilderOptionsType объекта):

export default function builder(path: string, {returnType = 'object'}: BuilderOptionsType): BuilderReturnType { ... } 

Если я изменить {returnType = 'object'} к options и затем destructure в рамках метода он, кажется, работает полностью нормально. Имея это в виду, заключается в том, что единственный способ разрешить использование jest и flow типов вместе? Я предпочел бы иметь возможность разрушить подпись, а не внутри тела метода.

ответ

0

Рассматривая вашу ошибку, вы можете просто не передавать второй аргумент функции. Если вы звоните builder('foo'), вы будете пытаться разрушить returnType с undefined.

Либо называть его со вторым арг: builder('foo', {}), или установить значение по умолчанию для аргумента:

export default function builder(path: string, {returnType = 'object'}: BuilderOptionsType = {}): BuilderReturnType { ... } 
+0

ах, я думал, что '{ReturnType = 'объект'}: BuilderOptionsType' было достаточно – hellatan

 Смежные вопросы

  • Нет связанных вопросов^_^