Typescript выдает ошибку для типа возвращаемой функции

Я новичок в машинописи. Я пытаюсь ввести эту фиктивную функцию, и она выдает следующую ошибку:

Значение типа '() = ›{doc: {name: string; заголовок: строка; тело: строка; категория: строка; isFunction: boolean; isOperator: undefined; supportedExecutionContexts: строка []; }; ошибка: undefined; } 'не имеет общих свойств с типом' IQuickHelpDocs '. Вы хотели назвать это? Ts (2560)

getHelpDocs.ts (27, 49): Вы хотели вызвать это выражение?

export const getHelpDocs: IHelpDocs = () => ({
  doc: {
    name: 'demo',
    header: 'demo',
    body: 'Returns the demo value of <code>value</code>',
    category: 'Number',
    isFunction: true,
    isOperator: undefined,
    supportedExecutionContexts: ['calc', 'my'],
  },
  error: undefined,
})

Types.ts

export interface IHelpDocs {
  doc?: IDoc
  error?: IDocsError
}

Не уверен, что мне не хватает. Так неловко. Пожалуйста, помогите.


person TechnoCorner    schedule 04.02.2021    source источник
comment
вы назначаете функцию интерфейсу.   -  person Daniel A. White    schedule 04.02.2021
comment
спасибо за ваш ответ @ DanielA.White Я новичок в машинописном тексте. Как я могу это решить? Я думал, что набираю возвращаемое значение функции нет?   -  person TechnoCorner    schedule 04.02.2021
comment
Отвечает ли это на ваш вопрос? Укажите тип возвращаемого значения в функции стрелки TypeScript   -  person Owen Kelvin    schedule 05.02.2021


Ответы (2)


В написанной вами аннотации указано, что getHelpDocs относится к типу IHelpDocs:

export const getHelpDocs: IHelpDocs = ...

Вместо этого вы, вероятно, хотели передать, что это функция, которая не принимает аргументов и возвращает IHelpDocs:

export const getHelpDocs: () => IHelpDocs = ...

Что может сбивать с толку, так это аннотация типа. Для функций вы можете аннотировать возвращаемый тип следующим образом:

export function getHelpDocs(): IHelpDocs { ... }

Для переменных вам нужно будет аннотировать весь shebang, иначе Typescript не будет знать, что следует ожидать функцию - с таким же успехом может быть, что вы действительно хотите иметь только интерфейс.

person Etheryte    schedule 04.02.2021

Вы говорите, что TypeScript getHelpDocs должен иметь форму IHelpDocs, но это не так. Это функция, возвращающая IHelpDocs.

Я бы изменил это, чтобы напрямую экспортировать function:

export function getHelpDocs(): IHelpDocs {
 return {  
    doc: {
    name: 'abs',
    header: '<code>abs(value)</code>',
    body: 'Returns the absolute value of <code>value</code>',
    category: 'Number',
    isFunction: true,
    isOperator: undefined,
    supportedExecutionContexts: ['calc', 'sql'],
  },
  error: undefined,
  };
}
person Daniel A. White    schedule 04.02.2021
comment
Как я могу изменить это, чтобы использовать неявный возврат с ES6 const? - person TechnoCorner; 04.02.2021
comment
@t нет необходимости делать это таким образом - это намного понятнее, ИМО. - person Daniel A. White; 04.02.2021
comment
Я ценю твой ответ. Но мне бы хотелось знать, как использовать ES6 с неявным возвратом. Является ли это возможным? (PS: я не оценивал этот ответ) - person TechnoCorner; 04.02.2021