相关疑难解决方法(0)

何时在TypeScript/Angular2中使用Interface和Model

我最近使用TypeScript观看了Angular 2的教程,但不确定何时使用接口以及何时使用模型来保存数据结构.

界面示例:

export interface IProduct {
    ProductNumber: number;
    ProductName: string;
    ProductDescription: string;
}
Run Code Online (Sandbox Code Playgroud)

型号示例:

export class Product {
    constructor(
        public ProductNumber: number,
        public ProductName: string,
        public ProductDescription: string
    ){}
}
Run Code Online (Sandbox Code Playgroud)

我想从URL加载JSON数据并绑定到接口/模型.有时我想要一个数据对象,其他时候我想要持有对象的数组.

我应该使用哪一个?为什么?

typescript angular

177
推荐指数
4
解决办法
10万
查看次数

94
推荐指数
4
解决办法
2万
查看次数

Mongoose的Typescript方式......?

试图在Typescript中实现Mongoose模型.搜索谷歌只揭示了混合方法(结合JS和TS).在没有JS的情况下,如何以我天真的方式实现User类?

希望能够在没有行李的情况下使用IUserModel.

import {IUser} from './user.ts';
import {Document, Schema, Model} from 'mongoose';

// mixing in a couple of interfaces
interface IUserDocument extends IUser,  Document {}

// mongoose, why oh why '[String]' 
// TODO: investigate out why mongoose needs its own data types
let userSchema: Schema = new Schema({
  userName  : String,
  password  : String,
  firstName : String,
  lastName  : String,
  email     : String,
  activated : Boolean,
  roles     : [String]
});

// interface we want to code to?
export interface IUserModel …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose node.js typescript

56
推荐指数
11
解决办法
4万
查看次数

typescript接口需要存在两个属性之一

我正在尝试创建一个可以拥有的界面

export interface MenuItem {
  title: string;
  component?: any;
  click?: any;
  icon: string;
}
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法要求componentclick设置
  2. 有没有办法要求两个属性都不能设置?

typescript

48
推荐指数
8
解决办法
2万
查看次数

在typescript中创建模型类

嗨,我是typescritpt的新手,我来自C#和Javascript背景.我正在尝试创建一种方法,允许我创建类似于我们在C#中可以做的类模型.这是我尝试过的:

export class DonutChartModel {
    dimension: number;
    innerRadius: number;
    backgroundClass: string;
    backgroundOpacity: number;
}
Run Code Online (Sandbox Code Playgroud)

我希望这能生成一个公开声明属性的javascript模型,但这些模型只生成一个没有声明属性的函数DonutChartModel.

在查看文档后,我注意到为了公开属性,我必须添加一个构造函数,从那里初始化属性.虽然这可能有效,但是对于每个模型可能有20个或更多特性的情况,初始化在我看来可能看起来比较安全,并且还会降低可读性.

我希望有一种方法可以做这样的事情而不传递构造函数params:

var model = new DonutChartModel();
model.dimension = 5
model.innerRadius = 20
....
Run Code Online (Sandbox Code Playgroud)

那么打字稿中是否有任何选项可以做到这一点?

typescript

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

错误消息:“接口只能扩展对象类型或对象类型与静态已知成员的交集”

以下代码:

export type Partial2DPoint = { x: number } | { y: number }
export interface Partial3DPoint extends Partial2DPoint {
  z: number
}
Run Code Online (Sandbox Code Playgroud)

失败并出现以下错误:

接口只能扩展对象类型或对象类型与静态已知成员的交集。

为什么会这样?

typescript

35
推荐指数
1
解决办法
1万
查看次数

Typescript中接口和类之间的区别

在Typescript接口和类之间有什么不同?我什么时候使用Class?我什么时候使用Interfaces?他们有什么好处?

我需要为我的后端服务器(使用Angular 2执行它)创建某种类型的http请求,例如:},

"fields": {
  "project": {
      "id": "10000"
  },
  "summary": "something's wrong",
  "issuetype": {
      "id": "10000"
  },
  "assignee": {             // not neccesary required
      "name": "homer"
  },
  "reporter": {
      "name": "smithers"
  },
  "priority": {            // not neccesary required
      "id": "20000"
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该用什么来构建这些模型?谢谢!

interface class models typescript angular

34
推荐指数
4
解决办法
1万
查看次数

什么用于TypeScript中的纯数据对象:类或接口?

我有一堆只有数据的"类"(在.NET世界中我们称之为POCO对象),它们没有任何方法甚至构造函数.示例是客户,产品,用户实体,您将其命名为......

最初我开始使用typescript类,但现在我认为将它们声明为接口可能会更好.从性能的角度来看,不仅仅是......在C#中,我们习惯使用不同的接口,而对于"POCO"(普通旧clr对象或"仅数据"对象)我们使用只是一个类(有时甚至是结构).

在TypeScript中声明它们的正确方法是什么?

请注意,我主要理解(我认为)类和接口之间的技术差异(即接口是编译时构造),但我试图找出哪种语义符合这种情况.

PS:我见过类似的问题(比如这个),但是没有一个问题清楚明确地解决这个具体问题,所以请不要将其视为'可能重复'或'基于意见'(因为它不是): )

javascript typescript

19
推荐指数
2
解决办法
2925
查看次数

TypeScript中扩展和交叉接口之间的区别?

假设定义了以下类型:

interface Shape {
  color: string;
}
Run Code Online (Sandbox Code Playgroud)

现在,请考虑以下方法为此类型添加其他属性:

延期

interface Square extends Shape {
  sideLength: number;
}
Run Code Online (Sandbox Code Playgroud)

路口

type Square = Shape & {
  sideLength: number;
}
Run Code Online (Sandbox Code Playgroud)

两种方法有什么区别?

而且,为了完整性和出于好奇,有没有其他方法可以产生可比较的结果?

extends types intersection typescript

13
推荐指数
1
解决办法
2939
查看次数

何时在TS中使用类型(vs接口)

我无法确定何时,如果有的话,你想要在打字稿中使用a type代替interface变量.假设以下两个:

type User = {
    id: string;
    name: string;
    type: string;
}

interface User {
    id: string;
    name: string;
    type: string;
}
Run Code Online (Sandbox Code Playgroud)

我可以定义一个完全相同的变量const user: User = ....但是,这里有所有的事情我可以做interface,我不能这样做types:

// Extension:
interface AdminUser extends User {
    permissions: string[];
    role: string;
}

// Using in abstract method:
abstract class Home {
    abstract login(user: User): void;
}

class AdminHome extends Home {
    login(user: AdminUser) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

仅举几个.

所以我的问题是:你什么时候想要使用type

javascript typescript

11
推荐指数
1
解决办法
3384
查看次数