当前位置: 首页 > 知识库问答 >
问题:

Typescript子类类型(类型断言)

诸葛嘉熙
2023-03-14
class Animal {
  constructor(public name: string, public age: number) {}
}

class Cat extends Animal {
  constructor(name: string, age: number) {
    super(name, age);
  }
  public miaou() {
    console.log('Miaou');
  }
}

class Kennel {
  animals = Map<string, Animal> new Map();

  public addAnimal(animal: Animal): void {
    this.animals.set(animal.name, animal);
  }

  public retrieveAnimal(name: string): Animal {
    return this.animals.get(name);
  }
}

let kennel = <Kennel> new Kennel();
let hubert = <Cat> new Cat('Hubert', 4);

kennel.addAnimal(hubert);

let retrievedCat: Cat = kennel.retrieveAnimal('Hubert'); // error  
let retrievedCat = <Cat> kennel.retrieveAnimal('Hubert'); // Works

编辑:OK,在typescript规范中有详细说明:类型断言

class Shape { ... }
class Circle extends Shape { ... }
function createShape(kind: string): Shape {
 if (kind === "circle") return new Circle();
 ...
}
var circle = <Circle> createShape("circle");

共有1个答案

徐瀚
2023-03-14

RetrieveAnimal“函数返回一个”Animal“类型对象,但在这里

let retrievedCat: Cat = kennel.retrieveAnimal('Hubert');

您声明了“cat”类型的“retrievedcat”变量,因此您确实不能将Animal转换为cat。

在第二种情况下:

let retrievedCat = <Cat> kennel.retrieveAnimal('Hubert');
 类似资料:
  • 本节介绍类型断言,有使用关键字 as 和标签 <> 两种方式,因后者会与JSX 语法冲突,建议统一使用 as 来进行类型断言。 1. 慕课解释 TypeScript 允许你覆盖它的推断,毕竟作为开发者你比编译器更了解你写的代码。 类型断言主要用于当 TypeScript 推断出来类型并不满足你的需求,你需要手动指定一个类型。 2. 关键字 as 当你把 JavaScript 代码迁移到 TypeS

  • TypeScript 类型检查机制包含三个部分: 类型推断 类型保护 类型兼容性 本节介绍其中的类型推断,类型推断主要用于那些没有明确指出类型的地方帮助确定和提供类型,这是 TypeScript 的一种能力。 类型推断是有方向的,要注意区分从左向右和从右向左两种推断的不同应用。 1. 慕课解释 类型推断的含义是不需要指定变量类型或函数的返回值类型,TypeScript 可以根据一些简单的规则推断其

  • 想实现value是string那么val就是string,value是string[]那么val就是string[]

  • options 怎么会是这个类型?应当是{ [key: string | number]: any }[] 才对啊。 是哪里出了问题?如何解决呢? "vue-tsc": "^1.8.27"

  • 数字(number) 字符串(string) 数组(array) 元组(tuple) 任意值(any) null 和 undefined void never 其中元组、枚举、任意值、void和never类型是 TypeScript 特有的。 元组类型 元组类型用于表示已知元素类型和数量的数组,各类型不必相同。 枚举类型 枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 M