Javascript 类型脚本、导入、“新建”、构造函数和接口?
问题不在于中的新关键字,而在于实际方法 在定义ES2015类时,我有点与我的C和JavaScript思维模式格格不入。在C中,我使用依赖项注入将依赖项注入类的构造函数中。在JavaScript中,由于其原型性质,我了解到无需将依赖项注入构造函数;您可以安全地使用导入,因为您可以稍后模拟该方法进行单元测试 因此,许多模块只是开箱即用,不需要实例化它们。节点模块就是例子 我一直在我的项目中使用TypeScript。如您所知,您可以使用它的接口。到目前为止,我一直在做的是将接口设置为属性,然后将相关类设置为属性 为了更好地说明我在说什么,假设我有A级:Javascript 类型脚本、导入、“新建”、构造函数和接口?,javascript,typescript,import,constructor,Javascript,Typescript,Import,Constructor,问题不在于中的新关键字,而在于实际方法 在定义ES2015类时,我有点与我的C和JavaScript思维模式格格不入。在C中,我使用依赖项注入将依赖项注入类的构造函数中。在JavaScript中,由于其原型性质,我了解到无需将依赖项注入构造函数;您可以安全地使用导入,因为您可以稍后模拟该方法进行单元测试 因此,许多模块只是开箱即用,不需要实例化它们。节点模块就是例子 我一直在我的项目中使用TypeScript。如您所知,您可以使用它的接口。到目前为止,我一直在做的是将接口设置为属性,然后将相关类
class A implements Letter {
hello(){
console.log("Hello World");
}
}
及其接口字母:
interface Letter {
hello(): void
}
然后我有一本使用我所说方法的教科书
export class Book{
letter : Letter
constructor(){
this.letter = A;
}
Read(){
console.log("We're about to read this chapter!");
this.letter.hello();
}
}
它可以这样使用:
import {Book} from './book'
let book = new Book();
book.Read();
import {BookVersionJs} from './BookVersionJs'
BookVersionJs.Read();
另一方面,我有BookVersionJs,他不使用任何接口,直接实现它:
import {A} from './a.ts';
export class BookVersionJs{
Read(){
console.log("We're about to read this chapter!");
A.Hello();
}
}
然后我们可以这样使用它:
import {Book} from './book'
let book = new Book();
book.Read();
import {BookVersionJs} from './BookVersionJs'
BookVersionJs.Read();
但是我失去了接口给我的理论上的松散耦合。理论上,因为JavaScript可以用原型覆盖它们
实用性是不同的。在TypeScript/JavaScript中,我应该瞄准哪一个?还是意见问题 很难说清楚你在问什么,但我可以肯定地说,我更喜欢你的书籍示例的外观,而不是你的BookVersionJs示例,尽管它们都有一些语法错误 想想看书吧 BookVersionJs 书 您的对象应该在语义上有意义,否则任何使用您的代码的人都会感到非常困惑 如果您关心的是可测试性,那么请务必插入该信函。您可以保留A作为默认类型,以便在日常代码中更容易使用,并在单元测试期间提供不同的字母实现
export class Book{
letter : Letter;
constructor(letter: Letter = new A()) { // Note: Assign instance of A, not just A. A is a type, not a value.
this.letter = letter;
}
Read(){
console.log("We're about to read this chapter!");
this.letter.hello();
}
}
您不能执行A.hello,因为A是一个类,而不是一个实例。您需要要么执行新的A.hello,要么将hello方法设为静态。@NitzanTomer ooooohohh我终于找到了它。问题是,我总是因为传输而感到困惑。这个答案和我想说的有很大关系。是的。问题解决了。多亏了你的评论,我终于找到了我想要的东西;谢谢你,米奇。我在TypeScript上的单个文档上快速编写了代码,没有检查任何内容。我真正想问的是,如果TypeScript/JavaScript方式不直接实例化一个类和一个静态方法更好,或者我应该继续Java/C方式并新建对象?这可能是主观的,但我说是的,一定要使用new;特别是如果您使用的是TypeScript而不是普通的JavaScript。TypeScript完全包含了整个基于类的方法,回到一种更实用的风格意味着使用TypeScript有点多余和浪费。