Расширение (обновление) стороннего интерфейса объявления старого типа новым - PullRequest
0 голосов
/ 25 сентября 2018

Моя проблема в том, что я использую старый пакет объявлений типов (@types/expo).Вот почему мне нужно обновить какую-то его часть.Я создал новый файл для печати, как это.(./typings/expo/index.d.ts)

import * as expo from 'expo';

declare module 'expo' {
  var Icon: any;
  var SplashScreen: any;

  export interface AppLoadingProps {
    startAsync?: () => Promise<void[]>;
  }
}

Некоторые части начали работать, но я также начал получать эту ошибку:

[ts] Subsequent property declarations must have the same type. 
Property 'startAsync' must be of type '(() => Promise<void>) | undefined', 
but here has type '(() => Promise<void[]>) | undefined'

Я искал ее на форумах Google и машинописи, но это не такУ меня нет значимого ответа на это.Можно ли обновить интерфейс с таким же реквизитом?Или мне нужно подождать, пока компания обновит свой пакет на definitelyTyped?

мой файл tsconfig.json;

{
  "compilerOptions": {
    "target": "ES2017",
    "module": "es2015",
    "lib": [ /* Specify library files to be included in the compilation. */
      "es2017",
      "dom"
    ],
    "jsx": "react-native",
    "importHelpers": true,
    "strict": true,
    "noImplicitAny": true,
    "strictFunctionTypes": true,
    "noImplicitThis": true,
    "moduleResolution": "node",
    "typeRoots": [ /* List of folders to include type definitions from. */
      "./typings",
      "./node_modules/@types"
    ],
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "noEmitHelpers": true,
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "forceConsistentCasingInFileNames": true,
    "outDir": "build/dist"
  },
  "exclude": [
    "build",
    "node_modules"
  ],
  "types": [
    "typePatches"
  ]
}

1 Ответ

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

Если вам нужно перезаписать существующее объявление свойства, чтобы изменить тип, вам нужно раскошелиться на @types/expo типы.

Самый простой способ - это, вероятно, скопировать файл index.d.ts в ваш typings и удалите оригинальный пакет @types/expo.Или вы можете использовать инструмент, такой как Braid (раскрытие: я участник Braid), чтобы импортировать файл types/expo/index.d.ts непосредственно из репозитория DefiniteTyped;Преимущество этого заключается в том, что легко объединить вышестоящие обновления с вашими собственными изменениями, но это может не иметь значения для вас, если так или иначе скоро будет произведено обновление DefiniteTyped.

В любом случае, у вас есть возможность настроить *Параметры 1012 *baseUrl и paths , чтобы при разрешении модуля был найден файл index.d.ts или для создания package.json для измененного пакета @types/expo и зарегистрировать его в качестве зависимости в основном package.json, используяотносительный путь.

...