我最近使用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数据并绑定到接口/模型.有时我想要一个数据对象,其他时候我想要持有对象的数组.
我应该使用哪一个?为什么?
以下有什么区别?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
Run Code Online (Sandbox Code Playgroud) 试图在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) 我正在尝试创建一个可以拥有的界面
export interface MenuItem {
title: string;
component?: any;
click?: any;
icon: string;
}
Run Code Online (Sandbox Code Playgroud)
component或click设置嗨,我是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)
那么打字稿中是否有任何选项可以做到这一点?
以下代码:
export type Partial2DPoint = { x: number } | { y: number }
export interface Partial3DPoint extends Partial2DPoint {
z: number
}
Run Code Online (Sandbox Code Playgroud)
失败并出现以下错误:
接口只能扩展对象类型或对象类型与静态已知成员的交集。
为什么会这样?
在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)
我应该用什么来构建这些模型?谢谢!
我有一堆只有数据的"类"(在.NET世界中我们称之为POCO对象),它们没有任何方法甚至构造函数.示例是客户,产品,用户实体,您将其命名为......
最初我开始使用typescript类,但现在我认为将它们声明为接口可能会更好.从性能的角度来看,不仅仅是......在C#中,我们习惯使用不同的接口,而对于"POCO"(普通旧clr对象或"仅数据"对象)我们使用只是一个类(有时甚至是结构).
在TypeScript中声明它们的正确方法是什么?
请注意,我主要理解(我认为)类和接口之间的技术差异(即接口是编译时构造),但我试图找出哪种语义符合这种情况.
PS:我见过类似的问题(比如这个),但是没有一个问题清楚明确地解决这个具体问题,所以请不要将其视为'可能重复'或'基于意见'(因为它不是): )
假设定义了以下类型:
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)
两种方法有什么区别?
而且,为了完整性和出于好奇,有没有其他方法可以产生可比较的结果?
我无法确定何时,如果有的话,你想要在打字稿中使用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?
typescript ×10
javascript ×4
angular ×2
class ×1
extends ×1
interface ×1
intersection ×1
models ×1
mongoose ×1
node.js ×1
types ×1