如何保持文字类型信息有效?

问题描述 投票:0回答:1

我有以下代码片段,我的问题是如何保留knowLiteral的文字类型信息,而不必像我现在所做的那样拼写出类型?

// @ts-check
/**
 * @typedef {Readonly<Record<string, string>>} ReadonlyStringRecord
 */

/**
 * @template {ReadonlyStringRecord} T
 */
class Main {
    /**
     * @param {T} knowLiteral
     */
    constructor(knowLiteral) {
        /**
         * @readonly
         * @type {T}
         */
        this.knowLiteral = knowLiteral;
    }
}


// how not to have to write this?
/**
 * @extends {Main<{
 *   this_is_know: '42'
 * }>}
 */
class Main2 extends Main {
    constructor() {
        const knowLiteral = /** @type {const} */ ({ 'this_is_know': '42' });
        super(knowLiteral);
    }

    testFunc() {
        //this should (and does) error.
        let x = this.knowLiteral.this_is_not_defined;
    }
}
javascript typescript jsdoc
1个回答
0
投票

为了在扩展 Main 类时保留 KnowLiteral 的文字类型信息而不手动拼出类型,您可以利用 TypeScript 的功能从常量对象推断类型。您可以通过将文字定义为 const 对象并让 TypeScript 自动推断类型来实现此目的。

© www.soinside.com 2019 - 2024. All rights reserved.