Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 11

0
votes
answers
15 views
+10

在我的角度(離子)項目

0

使用HTML-GL我想要什麼在我的角度(離子)項目

使用在我的角度項目中的組件庫裏面HTML-GL(與包括離子框架)。

我現在得到了什麼

我包括我的index.html庫裏面的腳本,右polyfills.js以上 - 這樣的:

<!-- HtmlGL import --> 
<script async src="assets/js/htmlgl.js"></script> 
<script async src="assets/js/htmlGL_pulse.js"></script> 

眼下以下網頁元素的作品在index.html

<html-gl> 
    <h1>This is an animated header</h1> 
<html-gl> 

什麼是錯誤

當我把在html以上單獨的組件,我得到了以下錯誤:

Uncaught Error: Template parse errors: 
'html-gl' is not a known element 

我怎樣才能確保該組件是知道`HTML-GL>標籤的?

+0

使用'npm install --save html-gl'來安裝模塊 –

+0

我在開始的時候這樣做了,但是這也不起作用。我忘了將它導入某處嗎?在Ionic中有什麼位置可以引導Javascript文件? – Lars

+0

我可能是錯的,但我相信HTML-GL不適用於Angular。 HTML-GL和Angular都處理DOM,而HTML-GL創建DOM元素的WebGL表示並隱藏實際的DOM,這將導致角度更改跟蹤出現問題。更何況,你在這裏遇到的問題是Angular認爲'html-gl'是一個Angular Component,它顯然不是。 – Claies

沙发
0
1

要使用不在Angular註冊表中的dom元素,您必須從angular core中導入自定義元素模式,並將其附加到您的NgModule的模式中。

import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';

+0

是的,我這樣做,頁面沒有錯誤地呈現。但是,該組件未被動畫化。一個htmlgl的工作示例將會輸出一個html元素,比如'',但是它對模式做了什麼,它會呈現''。它錯過了參數。 – Lars

+0

啊,請繼續。我已經解決了這個問題,一個人在這裏爲xdom,另一個webgl庫,雖然dom。但我目前在手機上,在這裏格式化一個帖子是可怕的。 –

+0

@Lars我相信加載元素時x3dom會發生同樣的情況。 HTML gl庫將搜索html-gl的所有實例並初始化它。但該庫很可能只在窗口加載時檢查dom,因此元素中的組件設置不正確。您將不得不在加載組件後按以下所述加載庫:https://stackoverflow.com/questions/44260121/integrate-angular-and-x3d-render-a-simple-box/44261948#44261948 –

0
votes
answers
19 views
+10

針對不同用戶的角度路由視圖

0

我正在嘗試爲3種類型的用戶在我的角度4應用中設置路由。針對不同用戶的角度路由視圖

一旦用戶登錄,他將被重定向到我的應用程序組件。這就是我的APP-component.html樣子:

<div class="main-container"> 
    <div class="wrapper"> 
    <router-outlet></router-outlet> 
    </div> 
</div> 

我要檢查一下用戶的類型,並根據這 - 在我的路由器出口打開了不同的路線。爲了給你一個想法,我會告訴你,我要爲結構:

index.html 
>app-component 
>register-component 
>login-component 
>dentist-view 
    schedule component 
    patients component 
    profile component 
    appointments component etc.. 
>admin-view 
    manage users component 
>patient-view 
    ambulatory-lists component 
    profile component 
    dentist search component 
    book appointment component etc.. 

所以根據我想加載完全不同的看法,用戶類型,在我的項目,這樣的結構等。我想爲每個用戶使用不同的導航欄,不同的編輯配置文件組件等等。什麼是正確的方法來實現這一點,因爲一旦登錄,我將收到重定向到應用程序組件的用戶類型,所以我將能夠發送它對它的孩子 - 牙醫檢查組件,患者查看組件等。

爲了給你一個更好的主意,就像這個替代方案,但路由將是偉大的:(聲明:我知道這個是不可能的:d) 在app.component.html

<div class="main-container"> 
    <div class="wrapper"> 
    <router-outlet> 
    <dentist-component *ngIf="isDentist()"></dentist-component> 
    <patient-component *ngIf="isPatient()"></patient-component> 
    <admin-component *ngIf="isAdmin()"></admin-component> 
    </router-outlet> 
    </div> 
</div> 

由於我是新來這一點,仍然盤算的事情了,我想知道如果我爲首的權方向或完全錯誤的方式。任何建議,非常感謝。

沙发
0
0

這個答案是基於@abdul hammed answer 更多信息在Angular.io documentation

衛隊是解決方案(guard.service):

import { Injectable }  from '@angular/core'; 
    import { CanActivate } from '@angular/router'; 
    import { Router } from '@angular/router'; 

    @Injectable() 
    export class Guard implements CanActivate { 
     canActivate() { 

    if (this.user && this.user.profile.role == 'Dentist') { 
      this.router.navigate(['dentist']); 
     } if else (this.user && this.user.profile.role == 'Patient') { 
      this.router.navigate(['patient']); 
     } ... 

     return true; 
     } 

constructor(private router: Router) { } 
    } 

而且你必須更新你的app.module文件,

import { Guard } from './_services/guard.service'; 
import { DentistComponent } from './dentist/dentist.component'; 
import { PatientComponent } from './dentist/patient.component'; 
@NgModule({ 
    declarations: [ 
    AppComponent, 
    DentistComponent, 
    PatientComponent 
    ], 
    imports: [ 
    BrowserModule, 
    HttpModule, 

    RouterModule.forRoot([ 
     { 
      path: 'dentist', 
      component: DestistComponent, 
      canActivate:[Guard] 
     }, 
     { 
     path: 'patient', 
     component: PatientComponent, 
     canActivate:[Guard] 
     } 
    ]) 
    ], 
    providers: [Guard], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 
0
votes
answers
25 views
+10

我在做什麼錯誤顯示數據? - Ionic 3&Firebase

1

我在我的Ionic 3應用程序中顯示一些Firebase數據時遇到問題。下面是我的組件相關的代碼(ABCDEF部分只是針對特定用戶的主要替補):我在做什麼錯誤顯示數據? - Ionic 3&Firebase

var ref = firebase.database().ref('/profiles/abcdef/'); 
this.viewProfile = ref.once("value") 
    .then(function(snapshot) { 
    var firstName = snapshot.child("firstName").val(); 
    var lastName = snapshot.child("lastName").val(); 
    var orgName = snapshot.child("orgName").val(); 
    console.log(firstName+' '+lastName+' works at '+orgName); 
    }); 

這裏就是我在視圖:

{{viewProfile.firstName}} 

沒有錯誤,根本不算什麼顯示器。有任何想法嗎?

+0

您是否檢查控制檯?名字是否打印? –

+0

嘗試添加異步{{viewProfile.firstName | async}} –

+0

是的,我應該提到 - 控制檯確實顯示了所有的變量,但我無法在頁面模板本身中正確顯示。不幸的是,添加異步並沒有解決這個問題。 – Nick

沙发
0
0

你需要循環的snapshot獲取數據

試試這個

var ref = firebase.database().ref('/profiles/abcdef/'); 
ref.once("value") 
    .then(function(snapshot) { 
     snapshot.forEach(function(data) { 
      this.viewProfile = data.val(); 
     } 
}); 
+0

事實上,snapshot.child(「firstName」).val()確實可以在控制檯中顯示每個變量,就像您的解決方案一樣。但是,它們都不能在頁面模板中顯示數據。 – Nick

+0

你需要'async'管道。請顯示代碼如何完成。 – Hareesh

+0

@PrithiviRaj建議它 – Hareesh

板凳
0
1

你非常接近@Hareesh:

var ref = firebase.database().ref('/profiles/abcdef/'); 
    ref.on('value' , profileSnapshot => { 
       this.viewProfile = profileSnapshot.val(); 
    }); 

{{viewProfile.firstName}} 

(不需要異步)似乎工作。

謝謝!!!

0
votes
answers
14 views
+10

將數組映射到Typescript/Angular中的對象

0

我有一個查詢後端API的服務。該API返回一組逗號分隔的文本行。這些列對應於我創建的TypeScript類中的屬性。類是:將數組映射到Typescript/Angular中的對象

export class TopTalker { 
    constructor(
     public source: string, 
     public protocol: number, 
     public packets: number, 
     public _percent: string, 
     public _tally: string 
    ) {} 
} 

我目前正在建設的物品運到這些像這樣:

getTopTalkers() { 
    this._silk.topTalkers().subscribe(
     data => { 
     let results = <any>[]; 
     results = data; 
     this.topTalkers = <any>[]; 
     for (let row of results) { 
      let thisTalker = row.split(/,/); 
      let a = new TopTalker(
      thisTalker[0], 
      thisTalker[1], 
      thisTalker[2], 
      thisTalker[3], 
      thisTalker[4]); 
      if(thisTalker.length > 1){ // Was getting a blank line 
      this.topTalkers.push(a); 
      } 
     } 
     console.log(this.largestTransfers); 
     }, 
     err => console.error(err), 
     () => console.log('Processed talkers') 
     ); 
    } 

這裏是由API返回的數據的一個例子:

[「8.248 .215.242,6,7037358,53.111350,53.111350" , 「8.248.209.245,6,2459465,18.561725,71.673076」, 「192.168.2.86,6,604136,4.559450,76.232525」,「192.168.2.43,6,295422,2.229567 ,78.462092" , 「192.168.2.39,6,254746,1.922583,80.384675」, 「8.248.211.241,6,182544,1.377670,81.762345」,「192 .168.2.69,6,180162,1.359693,83.122038" , 「8.250.125.246,6,152862,1.153658,84.275697」, 「8.248.213.243,6,93544,0.705982,84.981679」,「167.206.10.209,6,69862 ,0.527253,85.508931「,」「]

這有效,但它感覺真的錯了。有沒有我缺少的Angular或TypeScript的一些功能,可以讓我映射每一行來直接創建一個對象數組?

+0

您想要將逗號分隔的字符串數組轉換爲TopTalkers數組,對嗎? – mchandleraz

+0

您可以將轉換移入自己的工廠函數中,該函數接收一行並返回TopTalker以提高可讀性,但這非常重要。 – toskv

+0

@toskv所以除了模塊化之外,還有什麼能夠做到的「自動化」呢? –

沙发
0
1

如果我正確理解你的代碼,這樣的事情應該是非常接近你以後(和很多更容易閱讀,IMO)

getTopTalkers() { 
    this._silk.topTalkers().subscribe(
    results => { 
     this.topTalkers = results.map((row, index, rows) => { 
     let thisTalker = row.split(/,/); 

     // Avoid blank lines by checking length 
     if (thisTalker.length > 1) { 
      new TopTalker(
      thisTalker[0], 
      thisTalker[1], 
      thisTalker[2], 
      thisTalker[3], 
      thisTalker[4] 
     ); 
     } 
     }) 
    }, 
    err => console.error(err), 
    () => console.log('Processed talkers') 
); 
} 

理想情況下,我會探討如何說服務更新爲不返回怪誕的逗號分隔的字符串。

板凳
0
1

你可以通過移動測繪工作進入人體簡化您的構造函數簽名一點點,就像這樣:

class TopTalker { 

    public source: string; 
    public protocol: number; 
    public packets: number; 
    public _percent: string; 
    public _tally: string; 

    constructor(sourceRow: string[]) { 
     this.source = sourceRow[0]; 
     this.protocol = parseInt(sourceRow[1]); 
     this.packets = parseInt(sourceRow[2]); 
     this._percent = sourceRow[3]; 
     this._tally = sourceRow[4]; 
    } 
} 

這將刪除一些從實體化代碼的複雜性:

for (let row of results) { 
     let thisTalker = row.split(/,/); 
     let a = new TopTalker(thisTalker); 
     this.topTalkers.push(a);   
} 
0
votes
answers
29 views
+10

TSLint:Backbone get()在擁有模型之外調用,意思是

0

我使用的是微軟的tslint-microsoft-contrib tslint配置,我對此非常滿意。然而,有一條規則警告我我的代碼。我不明白規則描述文字或我如何解決這個更優雅。TSLint:Backbone get()在擁有模型之外調用,意思是

[tslint]骨幹get()方法被稱爲擁有模型之外: this.client.get( '位置')(無骨幹-GET-設置外模型)

代碼:

import * as Redis from 'ioredis'; 
import config from './config'; 

export class RedisWrapper { 
    private client: Redis.Redis 

    constructor(redisUrl: string) { 
    this.client = new Redis(redisUrl) 
    } 

    public async getLocations(): ILocation[] { 
    const locationsResponse: string = await this.client.get('locations') 
    } 
} 

在此行中tslint警告彈出:const locationsResponse: string = await this.client.get('locations')

問題:

本來我面臨這個問題在我的項目不同的地方,我想我應該寫與類型定義的包裝方法,但我沒能做出tslint滿意,要麼。有人能夠啓發我這個規則的意義和我如何解決它嗎?

沙发
0
0

我引用HamletDRC(從Microsoft隊)誰解釋規則本身非常好:

無骨幹-GET-設置外模型規則的要點是使 確定您不會調用 編譯器無法強制執行的動態調度方法。例如,如果您輸入route.params.get('id'), route.params.get('ID'),route.params.get('Id'),但只有其中的一個,編譯器將不會抱怨 調用實際上將在運行時工作。設計建議是 在RouteParams 對象上定義一個靜態類型的「getId():number」方法,以便編譯器可以強制執行這些調用。所以,在我看來 規則確實在你的代碼的問題,您應該解決(但 看到我的第二點:))

來源:https://github.com/Microsoft/tslint-microsoft-contrib/issues/123

在這種特殊情況下一個可以擴展像這樣的Redis類:

export class RedisWrapper extends Redis { 
    public async getLocations(): Promise<ILocation[]> { 
    const response: string = await this.get('locations'); 
    if (response == null || response.length === 0) { return []; } 

    return <ILocation[]>JSON.parse(response); 
    } 
} 
0
votes
answers
42 views
+10

的Visual Studio 2017年溫泉模板VUE JS缺少

1

我可以看到很多的溫泉模板實例 DOTNET新--install Microsoft.AspNetCore.SpaTemplates :: *的Visual Studio 2017年溫泉模板VUE JS缺少

確實有VueJs但是當我安裝它,我可以」即使使用-l參數,它似乎也會在列表中看到它。

有人知道這是什麼嗎?或者是一個完整的SPA種子項目?幾乎所有我嘗試過的項目都存在一些問題。

感謝

尼祿

沙发
0
0

運行安裝時收到錯誤消息?

我遇到了同樣的問題,結果是一個無效的NuGet包源代碼。如果安裝程序無法訪問任何軟件包源,則無法獲取最新的模板。

當我跑PS C:Usersme> dotnet new --install Microsoft.AspNetCore.SpaTemplates::*

我會看到一個錯誤在終端

Restoring packages for C:Userswacht.templateenginedotnetcliv2.1.4scratch
estore.csproj... 
C:Program Filesdotnetsdk2.1.4NuGet.targets(103,5): error : The local source '\privateserverNuGet' doesn't exist. [C:Userswacht.templateenginedotnetcliv2.1.4scratch
estore.csproj] 

之後我刪除了無法訪問包源,已安裝的更新我的本地SPA模板,並安裝了Vue的模板。

0
votes
answers
21 views
+10

如何在生產模式下創建應用程序Ionic3?

1

我想讓我的應用程序在離子3上生成模式。我嘗試如何在生產模式下創建應用程序Ionic3?

ionic cordova run android --prod --release 

但我一直錯誤:

Error: Encountered undefined provider! Usually this means you have a circular dependencies (might be caused by using 'barrel' index.ts files.

我的package.json模樣爲:

{ 
    "name": "ionic-wordpress", 
    "version": "0.0.1", 
    "author": "IonicThemes", 
    "homepage": "https://ionicthemes.com/", 
    "private": true, 
    "scripts": { 
    "clean": "ionic-app-scripts clean", 
    "build": "ionic-app-scripts build", 
    "lint": "ionic-app-scripts lint", 
    "ionic:build": "ionic-app-scripts build", 
    "ionic:serve": "ionic-app-scripts serve" 
    }, 
    "dependencies": { 
    "@angular/common": "4.1.3", 
    "@angular/compiler": "4.1.3", 
    "@angular/compiler-cli": "4.1.3", 
    "@angular/core": "4.1.3", 
    "@angular/forms": "4.1.3", 
    "@angular/http": "4.1.3", 
    "@angular/platform-browser": "4.1.3", 
    "@angular/platform-browser-dynamic": "4.1.3", 
    "@ionic-native/core": "3.12.1", 
    "@ionic-native/native-storage": "^4.2.1", 
    "@ionic-native/splash-screen": "3.12.1", 
    "@ionic-native/status-bar": "3.12.1", 
    "@ionic/storage": "^2.1.3", 
    "android-versions": "^1.2.1", 
    "cordova-android": "^6.3.0", 
    "cordova-browser": "^4.1.0", 
    "cordova-ios": "^4.4.0", 
    "cordova-plugin-console": "^1.1.0", 
    "cordova-plugin-device": "^1.1.7", 
    "cordova-plugin-nativestorage": "^2.2.2", 
    "cordova-plugin-splashscreen": "^4.1.0", 
    "cordova-plugin-statusbar": "^2.3.0", 
    "cordova-plugin-whitelist": "^1.3.3", 
    "ionic-angular": "3.6.0", 
    "ionic-plugin-keyboard": "^2.2.1", 
    "ionicons": "3.0.0", 
    "q": "^1.5.1", 
    "rxjs": "5.4.0", 
    "sw-toolbox": "3.6.0", 
    "zone.js": "0.8.12" 
    }, 
    "devDependencies": { 
    "@ionic/app-scripts": "2.1.3", 
    "ionic": "3.12.0", 
    "typescript": "2.3.4" 
    }, 
    "description": "An Ionic project", 
    "cordova": { 
    "plugins": { 
     "cordova-plugin-nativestorage": {}, 
     "cordova-plugin-console": {}, 
     "cordova-plugin-device": {}, 
     "cordova-plugin-splashscreen": {}, 
     "cordova-plugin-statusbar": {}, 
     "cordova-plugin-whitelist": {}, 
     "ionic-plugin-keyboard": {} 
    }, 
    "platforms": [ 
     "browser", 
     "ios", 
     "android" 
    ] 
    } 
} 

也是我的NPM-具有的debug.log下一錯誤

160758 error Linux 4.10.0-28-generic 
160759 error argv "/usr/bin/nodejs" "/usr/lib/node_modules/npm/bin/npm-cli.js" "install" "--scripts-prepend-node-path=auto" 
160760 error node v4.8.4 
160761 error npm v2.15.11 
160762 error code EPEERINVALID 
160763 error peerinvalid The package @ionic-native/[email protected] does not satisfy its siblings' peerDependencies requirements! 
160763 error peerinvalid Peer @ionic-native/[email protected] wants @ionic-native/[email protected]^4.2.0 
160763 error peerinvalid Peer @ionic-native/[email protected] wants @ionic-native/[email protected]^3.6.0 
160763 error peerinvalid Peer @ionic-native/[email protected] wants @ionic-native/[email protected]^3.6.0 
160764 verbose exit [ 1, true ] 

請幫我找個錯誤。如果在默認模式下運行的應用程序,它是工作正常

ionic cordova run android

我GOOGLE之前詢問很多。謝謝。

+0

檢查與app.module.ts – Edison

+0

@Edison,請看看我的屏幕http://joxi.ru/J2b4x4VT4eMGMr所有的供應商。我有一個提供者和服務,但他們都包含提供者。 –

沙发
0
0

我發現enter link description here解決了romeodenis5

@NgModule({ 
providers: [ storage, ... ] 
}) 
in app.module.ts 

NOTE since @ionic/storage 2.x.x 
we import 
IonicStorageModule instead of storage 
0
votes
answers
27 views
+10

在打字稿

0

lodash寫類型安全的「挑」的功能有一個用來如下挑功能:在打字稿

var object = { 'a': 1, 'b': '2', 'c': 3 }; 

_.pick(object, ['a', 'c']); 
// => { 'a': 1, 'c': 3 } 

我想在打字稿寫的這一個類型安全的版本。這個功能的

用法應該是

pick(object, o => o.a, o.b) 

的目標不是指定兩次相同的密鑰,並在同一時間養護類型安全。

這可能實現嗎?

+0

您的選擇函數似乎有一個不同於lodash示例的簽名?那些第二和第三個參數(特別是第三個參數)是什麼? – CRice

沙发
0
0

聽起來像你可能正在尋找Pick type。像這樣的東西適合你嗎?

function pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> { 
    const ret: any = {}; 
    keys.forEach(key => { 
    ret[key] = obj[key]; 
    }) 
    return ret; 
} 

const o = {a: 1, b: '2', c: 3} 
const picked = pick(o, 'b', 'c'); 

picked.a; // not allowed 
picked.b // string 
picked.c // number 
0
votes
answers
8 views
+10

setTimeOut for elementRef

0

我正在使用Angular2。我有一個div:setTimeOut for elementRef

<div class="saved" #saved> 
    <p>Saved</p> 
    <i class="fa fa-check" aria-hidden="true"></i> 
</div> 

我訪問它在TS:

@ViewChild("saved") public saved: ElementRef; 

接下來我顯示該塊:

this.saved.nativeElement.style.display = 'block'; 

然後,我想幾秒鐘後隱藏它,但是這部分代碼不正確:

setTimeout(this.closeSavedWindow, 3000); 

其中

closeSavedWindow() { 
    this.saved.nativeElement.style.display = 'none'; 
    } 

的錯誤是

TypeError: this.saved is undefined

+0

這有內部和外部的功能,兩個不同的上下文可以調試此使用的console.log(本) closeSavedWindoe() –

沙发
0
0

嘗試setTimeout(this.closeSavedWindow.bind(this), 3000);

板凳
0
0

你所面臨的問題是由於在上下文中改變。在closeSavedWindow()函數內部,這指的是窗口對象,並且不包含任何名爲saved的屬性。因此錯誤。

這可以很容易地通過結合對功能方面的價值調用時,它被固定..

setTimeout(this.closeSavedWindow.bind(this), 3000); 
+0

Plunkr我在測試時使用.. https://plnkr.co/edit/JGtZYUN2xkQoJDM9n7BS?p=preview –

0
votes
answers
12 views
+10

如何從超類方法而不是超類類型返回子類型

1

我認爲這是一個正確實現泛型的問題,但我不確定。如何從超類方法而不是超類類型返回子類型

我創建代表這裏的問題Github的要點是: https://gist.github.com/ORESoftware/66b72b4b85262d957cb03ad097e4743e

說我有這個超:

class A { 

    foo(): A { 
     return this; 
    } 

    } 

和幾個子類,一個例子看起來像這樣:

class B extends A { 

    bar(): B { 
     return this; 
    } 

    } 

所以如果我做

new B().foo().bar()

這將在運行時工作,但它不編譯與TypeScript。這是因爲foo()聲明返回類型爲A,而不是類型B

如何返回this的類型,而不是聲明foo()總是返回A

我嘗試這樣做:

enter image description here

,但我得到這個錯誤:

enter image description here

沙发
0
1

你必須返回this使用polymorphic this type類型。

abstract class A { 
    foo(): this { 
     return this; 
    } 
} 

class B extends A { 
    bar(): this { 
     return this; 
    } 
} 

這將允許

const b = new B(); 

b.foo().bar(); 
+0

那麼我們有它,謝謝! –

板凳
0
1

我有兩個例子,一個具有過載和一個通用接口。

重載

如果你的意思是爲new C().foo().zoom()版本的工作,你可以做到這一點,同時還獲得一個關於bar()誤用下面的代碼,這將創建一個兼容的重載返回類型的子類型警告在父類:

class A { 
    foo(): A { 
    return this; 
    } 
} 

class B extends A { 
    foo(): B { 
    return this; 
    } 

    bar(): B { 
    return this; 
    } 
} 

class C extends A { 
    foo(): C { 
    return this; 
    } 

    zoom(): C { 
    return this; 
    } 
} 

const result = new C().foo().zoom(); 

如果在你的代碼的真正方法是確實要重複使用的東西,你可以調用super.foo() ......但在沒有需要的示例代碼。

foo(): C { 
    const a = super.foo(); 
    // You still need to return this, as it is a C, not an A. 
    return this; 
    } 

泛型

你不能讓基類的通用,爲了返回一個類型T。您不能將類用作其自己的類型參數的類型約束。 A也有問題,不能保證兼容T,延伸A

什麼你可能要做的是引入一個接口,並用它在每個類:

interface Fooable<T> { 
    foo(): T; 
} 

class A { 
    foo(): any { 
    return this; 
    } 
} 

class B extends A implements Fooable<C> { 
    bar(): B { 
    return this; 
    } 
} 

class C extends A implements Fooable<C> { 
    zoom(): C { 
    return this; 
    } 
} 

const result = new C().foo().zoom(); 
+0

這不是它的問題是,'FOO()'聲明其返回類型爲A'富():A',但我需要它可以是「this」的類型,可能是「B」或「C」,而不是「A」。 –

+0

我在這個問題上犯了一個錯誤,我糾正了它 - 我的意思是'new B()',而不是'new C()' –

+0

我會讓'A'成爲一個通用類來解決這個問題,但要做到這一點'需要具有'A類',並且不能將類用作其自己泛型類型參數的類型約束。 – Fenton