我想知道如何让打字稿知道代码在功能上有效。
它说它可能是一个字符串,当我真的不确定如何可能。这是一个错误吗?或者我只是输错了什么?
示例:
const i18nInstance = {
options: {defaultNS: 'common'}
}
const getInitialProps = (req: any, namespaces?: string | string[]) => {
if (!namespaces) {
namespaces = i18nInstance.options.defaultNS
}
if (typeof namespaces === 'string') {
namespaces = [namespaces]
}
const initialI18nStore = req.i18n.languages.reduce((langs, lang) => {
// typescript thinks namespaces could be a string, but it obviously will never be.
langs[lang] = namespaces.reduce((ns, n) => {
ns[n] = (req.i18n.services.resourceStore.data[lang] || {})[ns] || {}
return ns
}, {})
return langs
}, {})
return {
i18n: req.i18n,
initialI18nStore,
initialLanguage: req.i18n.language,
}
}
答案 0 :(得分:1)
我会将其重新分配给使用Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cassdba@cqlsh> SELECT station_name,arrival_timestamp
FROm stackoverflow.arrival_time2 ;
station_name | arrival_timestamp
--------------+---------------------
Wellington | 2018-03-22 11:05:00
(1 rows)
类型创建的变量:
string[]
这一行还有另一个问题:
let nss: string[];
if (typeof namespaces === 'string') {
namespaces = [namespaces];
}
nss = namespaces;
我认为这应该是
ns[n] = (req.i18n.services.resourceStore.data[lang] || {})[ns] || {}
ns[n] = (req.i18n.services.resourceStore.data[lang] || {})[n] || {}
是一个对象,因此无法用作密钥。
答案 1 :(得分:0)
将| undefined
添加到namespaces
参数
考虑不要改变namespaces
但是要创建单独的常量instaed
const nss: string[] = !ns
? []
: typeof ns === 'string'
? [ns]
: ns
答案 2 :(得分:0)
你可以让编译器确保它是字符串。
const getInitialProps = (req: any, namespaces?: string | string[]) => {
if (!namespaces) {
namespaces = 'default';
}
if (typeof namespaces === 'string') {
namespaces = [namespaces] as string[]
}
namespaces.concat();
}