我试图定义一个字符串常量,而不是必须多次定义它,我的代码如下;
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'设置为字符串类型,这样我不必在我的代码中都使用常量字符串?
答案 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
,尽管您可能想要前者。