Типизации и наследование - PullRequest
0 голосов
/ 03 августа 2020

Я могу создать типизацию для функции CustomErr следующим образом:

declare class CustomErr extends Error {
    constructor(message: string);
}

function CustomErr(message: string) {
    var err = new Error(message)
    Object.setPrototypeOf(err, CustomErr.prototype)
    return err
}

CustomErr.prototype = Object.create(Error.prototype, {
    name: { value: 'Custom Error', enumerable: false }
})

throw new CustomErr("something went wrong") // no error now

Это отлично работает, пока я не захочу получить доступ к CustomErr.message, который существует на Error:

Свойство message не существует для типа CustomErr. (2339)

Как это исправить?

Playground

1 Ответ

1 голос
/ 03 августа 2020

Обновлен , поскольку CustomErr - это сторонняя библиотека, которую нельзя изменить, не смешивайте код вместе.

// third-party-lib.js

function CustomErr(message: string) {
    var err = new Error(message)
    Object.setPrototypeOf(err, CustomErr.prototype)
    return err
}

CustomErr.prototype = Object.create(Error.prototype, {
    name: { value: 'Custom Error', enumerable: false }
})
// third-party-lib.d.ts

declare class CustomErr extends Error {
    constructor(message: string);
}
// my-code.ts

const err = new CustomErr("something went wrong") // no error now
console.log(err.message)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...