相关疑难解决方法(0)

打字稿:键入'string | 未定义”不能分配给“字符串”类型

当我将接口的任何属性设为可选时,将其成员分配给其他变量时出现如下错误

TS2322:键入“字符串| 未定义”不能分配给“字符串”类型。类型“未定义”不能分配给类型“字符串”。

interface Person {
  name?:string,
  age?:string,
  gender?:string,
  occupation?:string,
}

function getPerson(){
  let person = <Person>{name:"John"};
  return person;
}
let person: Person = getPerson();
let name1:string = person.name;//<<<Error here 
Run Code Online (Sandbox Code Playgroud)

如何解决此错误?

typescript

23
推荐指数
10
解决办法
2万
查看次数

TS2345:“字符串 | 类型的参数” null' 不可分配给'string | 类型的参数 网址树'

这个问题的标题是 Angular CLI 编译器抛出的消息。

我的 app.component.ts 中有这个构造函数:

    export class AppComponent {
      constructor(private userService: UserService, private auth: AuthService, router: Router) {
       auth.user$.subscribe(user => {
        if (user) {
         userService.save(user);

         let returnUrl = localStorage.getItem('returnUrl');
         router.navigateByUrl(returnUrl);
      }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面附加的代码部分中,我在“returnURL”处加了下划线,如果我将光标移到上面,它会显示:

“‘string | null’类型的参数不可分配给‘string | UrlTree’类型的参数。‘null’类型不可分配给‘string | UrlTree’类型。”

我有一个与 Firebase 相关的 user.service.ts:

    import { Injectable } from '@angular/core';
    import { AngularFireDatabase } from 'angularfire2/database';
    import * as firebase from 'firebase';

    @Injectable()
    export class UserService {

        constructor(private db: AngularFireDatabase) { }
  
          save(user: firebase.User) {
          this.db.object('/users/' …
Run Code Online (Sandbox Code Playgroud)

firebase typescript angular

6
推荐指数
3
解决办法
3万
查看次数

从 localStorage 中提取数字作为数字

我在应用程序的 localStorage 中存储了很多值,并且需要一种将“字符串”转换回数字的方法 - 如果它是数字。想法是,如果您<input type="number"> on your form, then the data going into the form and extracted from the form IS a number, but once stored - its converted to a string. So to repopulate that稍后强制使用 HTML 字段,则必须读取 localStorage 值并将其转换回数字,然后再重新填充输入字段 - 否则您会开始收到大量重复警告,有时还会收到错误,因为需要 NUMBERS,但 localStorage 正在检索字符串。

我的方法:假设输入的值是数字,那么只会存储一个数字(仅数字) - 因此您可以假设只会出现数字(即使它们是字符串)。只知道会返回数字可以实现这一点:

var allVariables = {} ;
var reg = new RegExp(/^\d+$/) ;  // this accounts for digits only
for (var x=0; x<localStorage.length;x++) {
  var keyValue = localStorage.getItem(localStorage.key(x)) ;
  if (reg.text(keyValue)) …
Run Code Online (Sandbox Code Playgroud)

javascript type-conversion local-storage angularjs

5
推荐指数
2
解决办法
7583
查看次数

如何从 localStorage 设置 React 状态?

我很难弄清楚如何使用 React 和 TS 从 localStorage 设置组件状态。在我检查 localStorage 实例是否存在后,它仍然显示类型不兼容,因为localStorage.getItem()仍然可以返回字符串或 null。

\n\n

如果我更改界面并添加,string |\xc2\xa0null我可以从 localStorage 设置状态,但是我无法再自行设置 localStorage,因为localStorage.setItem()似乎只接受string而不接受string | null

\n\n

编辑

\n\n

我想出了这个问题的“解决方案”。我不确定这是否是不好的做法,但它似乎有效。如果可以用更好的方式写出来,请告诉我。

\n\n
componentWillMount() {\n    let from = localStorage.getItem(\'from\');\n    let to = localStorage.getItem(\'to\');\n    let fromId = localStorage.getItem(\'fromId\');\n    let toId = localStorage.getItem(\'toId\');\n\n    if (typeof from === \'string\' &&\n        typeof to === \'string\' &&\n        typeof fromId === \'string\' &&\n        typeof toId === \'string\') {\n\n      this.setState({\n        inputFrom: from,\n        inputTo: to,\n        fromId: fromId,\n        toId: toId,\n …
Run Code Online (Sandbox Code Playgroud)

local-storage typescript reactjs

5
推荐指数
1
解决办法
3361
查看次数

打字稿,JSON.parse 错误:“类型 'null' 不可分配给类型 'string'。”

错误发生在这里:

let moonPortfolio;
...
moonPortfolio = JSON.parse(localStorage.getItem('moonPortfolio'));
Run Code Online (Sandbox Code Playgroud)

我发现这个答案很有意义,但是在重构后我仍然收到该错误:

正如错误所说,localStorage.getItem() 可以返回字符串或空值。JSON.parse() 需要一个字符串,因此您应该在尝试使用它之前测试 localStorage.getItem() 的结果。

if (portfolio.length === 0) {
  const storedPortfolio = localStorage.getItem('moonPortfolio');

  if (typeof storedPortfolio === 'string') {
    moonPortfolio = JSON.parse(localStorage.getItem('moonPortfolio'));
  }
  else {
    moonPortfolio = [];
  }

  if (moonPortfolio) {
    const savedPortfolio = Object.values(moonPortfolio);
    this.props.fetchAllAssets();
    // this.props.addCoins(savedPortfolio);
  }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我首先将 localStorage 的结果设置moonPortfolio为 var,然后检查 var 是否为typeof字符串。仍然收到打字稿错误?

这里有什么想法或方向吗?

javascript local-storage typescript

5
推荐指数
2
解决办法
7205
查看次数