找不到TypeScript常数字串

时间:2018-10-02 22:52:28

标签: reactjs typescript

我试图定义一个字符串常量,而不是必须多次定义它,我的代码如下;

class strtype {
    string str;
public:
    strtype() {
        cout << "strtype()" << endl;
        str = "Test";
    }

    strtype(const strtype &st) { // <-- add this!
        cout << "strtype(const strtype &)" << endl;
        str = st.str;
    }

    strtype(const string &ss) {
        cout << "strtype(const string &)" << endl;
        str = ss;
    }

    strtype(const char *ss) { // <-- add this!
        cout << "strtype(const char *)" << endl;
        str = ss;
    }

    strtype& operator=(const strtype &st) { // <-- change this!
        cout << "operator=(const strtype &)" << endl;
        str = st.str;
        return *this;
    }

    string get_str() const { return str; };
};

int main()
{
    strtype b = "example";
    cout << b.get_str() << endl;

    b = "something else";
    cout << b.get_str() << endl;
}

我对于为什么它不是'string'类型而不是看起来像是常量字符串的原因感到困惑。我试图像这样定义这个常量字符串;

interface RefreshReviewerBenchAction { type: 'REFRESH_REVIEWER_BENCH_COMPONENT' }

但是我收到一条错误消息,指出“找不到REFRESH_REVIEWER_BENCH_COMPONENT”。我认为找不到它,因为我正在使用期望类型的常量字符串。所以问题是字符串和“ REFRESH_REVIEWER_BENCH_COMPONENT”之间有什么区别?以及如何将'REFRESH_REVIEWER_BENCH_COMPONENT'设置为字符串类型,这样我不必在我的代码中都使用常量字符串?

2 个答案:

答案 0 :(得分:1)

您是对的,问题在于值和类型之间的差异。给定名称可以独立定义为值,类型或两者。 (可以将诸如'REFRESH_REVIEWER_BENCH_COMPONENT'之类的字符串文字用作值或类型。)使用typeof关键字可获取常量REFRESH_REVIEWER_BENCH_COMPONENT的类型:

export const REFRESH_REVIEWER_BENCH_COMPONENT = 'REFRESH_REVIEWER_BENCH_COMPONENT';
interface RefreshReviewerBenchAction { type: typeof REFRESH_REVIEWER_BENCH_COMPONENT }

如果您希望能够直接将REFRESH_REVIEWER_BENCH_COMPONENT用作类型,则可以定义类型别名:

export const REFRESH_REVIEWER_BENCH_COMPONENT = 'REFRESH_REVIEWER_BENCH_COMPONENT';
type REFRESH_REVIEWER_BENCH_COMPONENT = typeof REFRESH_REVIEWER_BENCH_COMPONENT;
interface RefreshReviewerBenchAction { type: REFRESH_REVIEWER_BENCH_COMPONENT }

答案 1 :(得分:0)

警告,我对Typescript还是很陌生,所以如果有人有更好的解决方案,请及时输入。

我认为您正在寻找的是Type Aliases。创建一个作为常量值别名的类型,然后引用该类型。

type REFRESH_REVIEWER_BENCH_COMPONENT = 'REFRESH_REVIEWER_BENCH_COMPONENT';

interface RefreshReviewerBenchAction { type: REFRESH_REVIEWER_BENCH_COMPONENT }

如果实现类具有设置为type的{​​{1}}属性或字符串值,则该实现类有效 REFRESH_REVIEWER_BENCH_COMPONENT,尽管您可能想要前者。