错误 TS2678 类型“'String'”与 angular 中的类型“””无法比较 5
error TS2678 Type "'String'" is not comparable to type '""' in angular 5
这是我在 angular 5:
中的代码
gotToWallet(wallet) {
const { countryId = '', currencyType = '' } = wallet || {};
let walletIdentity;
switch (currencyType) {
case 'CRYPTO':
walletIdentity = 'userWalletIdentity';
break;
case 'FIAT':
walletIdentity = 'fiatWalletIdentity';
break;
case 'ERC20TOKEN':
walletIdentity = 'xbxUserWalletIdentity';
break;
}
const { currencyId = '' } = (wallet || {})[walletIdentity] || {};
this.router.navigate([`walletMgmt/wallet-details/${currencyId}/${countryId}`]);
}
我在 运行ning ng build
命令时收到以下错误:
ERROR in src/app/wallet-management/wallets/wallets.component.ts(202,12): error TS2678: Type '"CRYPTO"' is not comparable to type '""'.
src/app/wallet-management/wallets/wallets.component.ts(205,12): error TS2678: Type '"FIAT"' is not comparable to type '""'.
src/app/wallet-management/wallets/wallets.component.ts(208,12): error TS2678: Type '"ERC20TOKEN"' is not comparable to type '""'.
为什么我会收到这个错误?当我 运行 ng serve
时,代码似乎工作正常。
我仅在尝试构建时收到此错误。
谢谢,如有任何帮助,我们将不胜感激。
switch (currencyType as any) {
出于某种原因(也许是 typescript 版本?),当你从钱包中析构 currencyType: ''
时,它被编译器解释为类型 '""' 而不是 'string'。所以把它当作任何东西都可以做到这一点
我刚刚遇到了同样的错误,结果证明是由 webpack 的循环导入依赖触发的。
@QiaosenHuang 建议的答案有效,但就 TypeScript 而言,这不是一个好的做法,因为它放弃了类型安全作为 TypeScript 的主要目标。正确的方法是使用接口传入类型化的 wallet
。
interface IWallet {
countryId: string;
currencyType: string;
// any other properties ...
}
function gotToWallet(wallet?: IWallet) {
// your code from the question ...
}
我注意到您测试了 wallet || {}
,因此这就是使用 null coalescing operator 作为函数参数的原因。但是当 wallet
为 undefined
时,您的代码实际上什么都不做。因此,更好的解决方案是要求 wallet
成为接口的真实实例(没有 ?
)并将 undefined
检查移到此函数之外。
这是我在 angular 5:
中的代码gotToWallet(wallet) {
const { countryId = '', currencyType = '' } = wallet || {};
let walletIdentity;
switch (currencyType) {
case 'CRYPTO':
walletIdentity = 'userWalletIdentity';
break;
case 'FIAT':
walletIdentity = 'fiatWalletIdentity';
break;
case 'ERC20TOKEN':
walletIdentity = 'xbxUserWalletIdentity';
break;
}
const { currencyId = '' } = (wallet || {})[walletIdentity] || {};
this.router.navigate([`walletMgmt/wallet-details/${currencyId}/${countryId}`]);
}
我在 运行ning ng build
命令时收到以下错误:
ERROR in src/app/wallet-management/wallets/wallets.component.ts(202,12): error TS2678: Type '"CRYPTO"' is not comparable to type '""'.
src/app/wallet-management/wallets/wallets.component.ts(205,12): error TS2678: Type '"FIAT"' is not comparable to type '""'.
src/app/wallet-management/wallets/wallets.component.ts(208,12): error TS2678: Type '"ERC20TOKEN"' is not comparable to type '""'.
为什么我会收到这个错误?当我 运行 ng serve
时,代码似乎工作正常。
我仅在尝试构建时收到此错误。
谢谢,如有任何帮助,我们将不胜感激。
switch (currencyType as any) {
出于某种原因(也许是 typescript 版本?),当你从钱包中析构 currencyType: ''
时,它被编译器解释为类型 '""' 而不是 'string'。所以把它当作任何东西都可以做到这一点
我刚刚遇到了同样的错误,结果证明是由 webpack 的循环导入依赖触发的。
@QiaosenHuang 建议的答案有效,但就 TypeScript 而言,这不是一个好的做法,因为它放弃了类型安全作为 TypeScript 的主要目标。正确的方法是使用接口传入类型化的 wallet
。
interface IWallet {
countryId: string;
currencyType: string;
// any other properties ...
}
function gotToWallet(wallet?: IWallet) {
// your code from the question ...
}
我注意到您测试了 wallet || {}
,因此这就是使用 null coalescing operator 作为函数参数的原因。但是当 wallet
为 undefined
时,您的代码实际上什么都不做。因此,更好的解决方案是要求 wallet
成为接口的真实实例(没有 ?
)并将 undefined
检查移到此函数之外。