是否需要修改NPM包以与Angular 2兼容(例如,添加类型,为它们制定指令)或任何现有包都可以工作吗?如果它们不兼容,我怎么知道什么是不兼容的?
例如,假设我要导入此包(https://github.com/pvorb/node-md5).我知道有一个用于角度2的ts-md5包来做md5 - 我只是以这个包为例.
我怎么能让这个工作?
我用它安装了它
npm install md5 --save
npm install @types/md5 --save
Run Code Online (Sandbox Code Playgroud)
但我似乎无法进口它
import {md5} from 'md5';
Run Code Online (Sandbox Code Playgroud)
我尝试运行后收到此错误消息
模块'"/ Users/xxx/Source/tempProjects/ngUnderscore/node_modules/@ types/md5/index"'解析为非模块实体,无法使用此结构导入.
我不确定这个消息是什么意思.这是否意味着在当前状态下,包不兼容或我是否尝试错误地使用包?
这样做有什么区别
export class Comment {
likes: string;
comment: string;
constructor(likes: string, comment: string){
this.comment = comment;
this.likes = likes;
}
}
Run Code Online (Sandbox Code Playgroud)
还有这个
export interface CommentInterface {
likes: string;
comment: string;
}
Run Code Online (Sandbox Code Playgroud)
关于声明可观察类型
register: Observable<CommentInterface[]> {
return this.http.get()
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过网络共享像本机应用程序一样的图像。我也在使用Angular。我使用了网络共享 API。这在 Android 上正常工作,但是在 iOS(Safari 和 Chrome)中会引发错误。我正在使用共享按钮来触发它。
这是我的代码:
if (
this.windowNavigator.canShare &&
this.windowNavigator.canShare({ files: [file] })
) {
this.windowNavigator
.share({
files: [file],
title: "Vacation Pictures",
text: "Photos from September 27 to October 14.",
})
.then(() => console.log("Share was successful."))
.catch((error) => console.log("Sharing failed", error));
} else {
console.error("Cannot use Web Share API");
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误是: Cannot use Web Share API
如果浏览器不受支持,通常会发生这种情况。但是,根据https://caniuse.com/#search=web%20share,iOS 上支持 Safari 13。请注意,我尝试将导航器对象记录到控制台,并且它确实具有 share() 原型。我在 HTTPS 服务器上运行它。请指导我如何进行。
该tsc编译器总是高高兴兴地编译console.log("foo")。变量在哪里console声明?即使lib在我的tsconfig.json. 所以console假设是通用的?总是声明哪些其他变量?更一般地说,我怎样才能找出存在的其他声明,以及它们来自哪里?(我能找到的唯一调试标志是--extendedDiagnostics,但它似乎几乎没用。)
我Kotlin如果我有interface这样的:
interface User {
val name: String
val email: String
}
Run Code Online (Sandbox Code Playgroud)
我可以在代码中的任何位置编写这样的扩展函数:
fun User.toUserDto(): UserDto {
TODO()
}
Run Code Online (Sandbox Code Playgroud)
在打字稿中,如果我有类似的interface:
export default interface User {
name: string;
email: string;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能以类似的方式增强它?这是该语言的最佳实践吗?有没有我不知道的替代方案?
javascript extension-methods kotlin typescript extension-function
该消息warning CS8604: Possible null reference argument是在呼叫 时发出的Process()。修复方法是将其标记为MemberNotNull。
如果 Derived 类中没有重写,则 MemberNotNull 按预期工作。
如果存在覆盖,为什么编译器仍然会发出警告?
有什么更好的方法来抑制这个警告?
using System;
using System.Diagnostics.CodeAnalysis;
namespace Tests
{
class Base
{
public virtual string? Member { get; set; }
[MemberNotNull(nameof(Member))]
public void Validate()
{
if (Member is null)
{
throw new Exception("Prop is null");
}
}
}
class Derived : Base
{
public override string? Member { get; set; } // warning CS8604: Possible null reference argument
}
[TestClass]
public class …Run Code Online (Sandbox Code Playgroud) 也许我不理解它,但是如果我有一个服务并且我从中捕获了任何错误,那么为什么会zone.js抛出 404 not found,而我捕获错误并返回 json 对象,这样客户端就会知道该怎么做。如何避免控制台中的错误?我可以吗?
例如:
return this.http.post(this.callUrl, requestBody)
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
return body || { };
}
private handleError (error: Response | any) {
let body = error.json();
return Observable.throw(body);
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法理解我在客户端应用程序上遇到的错误.我正在订阅graphql订阅,我能够检索更新,但我无法将更改推送到名为"models:ModelClass []"的视频脚本数组,该数组绑定到视图.
有什么我遗失或做错了吗?
models.component.ts
this.apollo.subscribe({
query: gql`
subscription {
newModelCreated{
_id
name
type
train_status
deploy_status
data_path
description
created_at
updated_at
}
}
`
}).subscribe((data) => {
console.log("CREATED: " + JSON.stringify(data.newModelCreated));
console.log(data.newModelCreated);
var temp:ModelClass = data.newModelCreated;
this.models.push(temp);
});
Run Code Online (Sandbox Code Playgroud)
模型class.ts
export interface ModelClass {
_id: string;
name: string;
type: string;
parameters: {
alpha: number;
};
train_status: string;
deploy_status: string;
test_accuracy: string;
created_at: number;
updated_at: number;
}
Run Code Online (Sandbox Code Playgroud) 我希望能够不必在我使用该模块中的值的所有位置前面键入模块名称(甚至是模块的别名)。(我宁愿不必求助于运行 C 预处理器,这样我就可以做 #include 类型的事情。)
(关闭但没有雪茄:Angular 2 import 语句通配符语法)
我想
import * from "./MyModule";
console.log( foobar );
Run Code Online (Sandbox Code Playgroud)
而不是烦人的东西,比如:
console.log( MyModule.foobar )
Run Code Online (Sandbox Code Playgroud)
或者:
import * as M from "./MyModule";
console.log( M.foobar );
Run Code Online (Sandbox Code Playgroud) 我有一个TypeScript单例类
class MySingleton {
private static _instance: MySingleton;
private constructor();
public static getInstance() {
if (!MySingleton._instance) {
MySingleton._instance = new MySingleton();
}
return MySingleton._instance;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想在创建这个单例实例时传递一些选项.
例如,将实例的模式设置为生产模式的选项.
因此,可以通过getInstance接受传播到构造函数的选项对象来实现.然后使用变得像
MySingleton.getInstance({
prodMode: true
});
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?这样做有点蠢,因为当通过传递选项对象MySingleton执行的消费者时getInstance,他或她无法知道传递的选项对象将被使用或被忽略.
javascript singleton design-patterns javascript-objects typescript
typescript ×8
javascript ×7
angular ×3
c# ×1
commonjs ×1
declaration ×1
ecmascript-6 ×1
es6-modules ×1
json ×1
kotlin ×1
npm ×1
rxjs ×1
singleton ×1
web-share ×1